C# 使用 Nancy 获取 HTTP 正文
C# getting HTTP body using Nancy
快速提问。我正在使用 Nancy 将 REST 调用转换为我正在处理的项目中的 api 调用。我不能完全让它工作。
我已经安装并运行了 Nancy,对于 GET 请求没问题。但是,当我使用内置的 RestClient 发出 POST 请求时,例如:
restClient.Post("/test", "Param");
电话打完后,我不知道怎么出去"Param"。
我有这样的 NancyModule 设置:
public class TestNancyModule : NancyModule {
public TestNancyModule() {
Post["/test"] = p => {
for(KeyValuePair<dynamic, dynamic> kvp in (DynamicDictionary)p)
Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
}
}
}
我在 NancyModule 中设置了一个断点,当我向 localhost/test 发出 post 请求时断点被击中,但我终究无法弄清楚如何提取"Param" 一旦我进入 Nancy 模块就退出。理想情况下,我可以做类似
的事情
string POSTParameters = p["Value"]
//POSTParameters now equals "Param"
有什么建议吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:我将保留原来的 post,但我会在这里澄清。我的意思是问如何访问传入请求的 HTTP 正文。不熟悉协议导致我使用错误的术语出现一些错误。
明白了,它可以在 "Request" 字段下访问。
对于代码,我可以通过执行
之类的操作来获得 Body
byte[] response = new byte[Request.Body.Length];
Request.Body.Read(response, 0, (int)Request.Body.Length);
和
string POSTParameters = System.Text.Encoding.Default.GetString(response);
这正是我要找的。如果 body 会变得更复杂,我不建议这样做,但我只会为此 post.
传递单个单词
如果你拉入 Nancy.Extensions
,你可以在 body 上使用 .AsString()
var thing = Request.Body.AsString();
这是南希的方式。
对于查询参数,您可以在模块上使用 Nancy 的 Request 对象。
var queryParam = this.Request.Query.ParamName;
对于实际的 post 主体,您可以使用
this.Bind();
这将创建一个具有正文中指定属性的动态。
在新版本的 NancyFx (1.4+) 中,您可以使用此解决方案:
using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();
同时
var yourString = Request.Body.AsString();
不再支持。
快速提问。我正在使用 Nancy 将 REST 调用转换为我正在处理的项目中的 api 调用。我不能完全让它工作。
我已经安装并运行了 Nancy,对于 GET 请求没问题。但是,当我使用内置的 RestClient 发出 POST 请求时,例如:
restClient.Post("/test", "Param");
电话打完后,我不知道怎么出去"Param"。
我有这样的 NancyModule 设置:
public class TestNancyModule : NancyModule {
public TestNancyModule() {
Post["/test"] = p => {
for(KeyValuePair<dynamic, dynamic> kvp in (DynamicDictionary)p)
Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
}
}
}
我在 NancyModule 中设置了一个断点,当我向 localhost/test 发出 post 请求时断点被击中,但我终究无法弄清楚如何提取"Param" 一旦我进入 Nancy 模块就退出。理想情况下,我可以做类似
的事情 string POSTParameters = p["Value"]
//POSTParameters now equals "Param"
有什么建议吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:我将保留原来的 post,但我会在这里澄清。我的意思是问如何访问传入请求的 HTTP 正文。不熟悉协议导致我使用错误的术语出现一些错误。
明白了,它可以在 "Request" 字段下访问。
对于代码,我可以通过执行
之类的操作来获得 Body byte[] response = new byte[Request.Body.Length];
Request.Body.Read(response, 0, (int)Request.Body.Length);
和
string POSTParameters = System.Text.Encoding.Default.GetString(response);
这正是我要找的。如果 body 会变得更复杂,我不建议这样做,但我只会为此 post.
传递单个单词如果你拉入 Nancy.Extensions
.AsString()
var thing = Request.Body.AsString();
这是南希的方式。
对于查询参数,您可以在模块上使用 Nancy 的 Request 对象。
var queryParam = this.Request.Query.ParamName;
对于实际的 post 主体,您可以使用
this.Bind();
这将创建一个具有正文中指定属性的动态。
在新版本的 NancyFx (1.4+) 中,您可以使用此解决方案:
using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();
同时
var yourString = Request.Body.AsString();
不再支持。