繁体   English   中英

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请求时会遇到这个断点,但是我不能为我的生活弄清楚如何在Nancy里面提取“Param”模块。 理想情况下,我可以做一些类似的事情

    string POSTParameters = p["Value"]
    //POSTParameters now equals "Param"

有什么建议么?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

编辑:我要离开原来的帖子了,但我会在这里澄清一下。 我的意思是询问如何访问传入请求的HTTP正文。 不熟悉协议导致我使用错误的术语出现一些错误。

如果你拉入Nancy.Extensions你可以在身体上使用.AsString()

var thing = Request.Body.AsString();

这是南希的方式。

在新版本的NancyFx(1.4+)中,您可以使用此解决方案:

using Nancy.IO;
...
var yourString = RequestStream.FromStream(Request.Body).AsString();

var yourString = Request.Body.AsString(); 

不再支持。

想出来,它可以在“请求”字段下访问。

对于代码,我可以通过做类似的事情来获取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);

这正是我想要的。 如果身体会变得更复杂,我不建议这样做,但我只会用一个单词来传递这篇文章。

对于查询参数,您可以在模块上使用Nancy的Request对象。

var queryParam =  this.Request.Query.ParamName;

对于您可以使用的实际帖子

this.Bind(); 

这将使用正文中指定的属性创建动态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM