C#使用Nancy获取HTTP主体
快速提问。我正在使用Nancy将REST调用转换为我正在处理的项目中的api调用。我不能完全让它工作 我已经让Nancy准备好并开始工作了,对于GET请求,一切都很好。但是,当我使用内置RestClient发出POST请求时,例如:C#使用Nancy获取HTTP主体,c#,nancy,C#,Nancy,快速提问。我正在使用Nancy将REST调用转换为我正在处理的项目中的api调用。我不能完全让它工作 我已经让Nancy准备好并开始工作了,对于GET请求,一切都很好。但是,当我使用内置RestClient发出POST请求时,例如: restClient.Post("/test", "Param"); 一旦打了电话,我想不出如何把“Param”弄出来 我的NancyModule设置如下: public class TestNancyModule : NancyModul
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);
}
}
}
有什么建议吗
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:我保留原来的帖子,但我会在这里澄清。我想问一下如何访问传入请求的HTTP主体。对协议的不熟悉导致我使用了一些错误的术语。解决了这个问题,可以在“请求”字段下访问它 对于代码,我可以通过如下操作获得身体
byte[] response = new byte[Request.Body.Length];
Request.Body.Read(response, 0, (int)Request.Body.Length);
及
这正是我想要的。如果正文变得更复杂,我不建议这样做,但我只想为这篇文章传递一个单词。如果你把Nancy.Extensions拉进来,你可以在正文上使用
.AsString()
var thing = Request.Body.AsString();
这是Nancy的方法。对于查询参数,您可以在模块上使用Nancy的请求对象
var queryParam = this.Request.Query.ParamName;
对于实际的帖子主体,您可以使用
this.Bind();
这将使用正文中指定的属性创建动态。在新版本的NancyFx(1.4+)中,您可以使用以下解决方案:
using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();
当
var yourString = Request.Body.AsString();
不再支持。谢谢!这是一种更好的方法,因为方法astring()不存在。南希1。4@ArtemG-注意“拉入Nancy.Extensions”部分,即使用using Nancy.Extensions;在using子句中插入一行。
using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();
var yourString = Request.Body.AsString();