快速提问。我正在使用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”南希模块里面。理想情况下,我可以做一些像
这样的事情 string POSTParameters = p["Value"]
//POSTParameters now equals "Param"
有什么建议吗?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:我要离开原来的帖子,但我会在这里澄清一下。我的意思是询问如何访问传入请求的HTTP正文。对协议的不熟悉导致我使用错误的术语出现了一些错误。
答案 0 :(得分:3)
如果您引入.AsString()
Nancy.Extensions
var thing = Request.Body.AsString();
这是南希的方式。
答案 1 :(得分:3)
在新版本的NancyFx(1.4+)中,您可以使用此解决方案:
using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();
而
var yourString = Request.Body.AsString();
不再支持。
答案 2 :(得分:1)
想出来,它可以在“请求”字段下访问。
对于代码,我可以通过执行类似
的操作来获取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);
这正是我想要的。如果身体会变得更复杂,我不建议这样做,但我只会用一个单词来传递这篇文章。
答案 3 :(得分:0)
对于查询参数,您可以在模块上使用Nancy的Request对象。
var queryParam = this.Request.Query.ParamName;
对于实际的帖子正文,您可以使用
this.Bind();
这将使用正文中指定的属性创建动态。