【问题标题】:C# getting HTTP body using NancyC# 使用 Nancy 获取 HTTP 正文
【发布时间】:2017-04-27 17:49:42
【问题描述】:

快速提问。我正在使用 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 发出发布请求时,它会被命中,但我终其一生都无法弄清楚如何提取“Param”在南希模块内。理想情况下,我可以做类似

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

有什么建议吗?

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

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

【问题讨论】:

    标签: c# nancy


    【解决方案1】:

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

    var thing = Request.Body.AsString();
    

    这是南希的方式。

    【讨论】:

    • 谢谢!这是一种更好的方法
    • 方法 AsString() 不存在。南希 1.4
    • @ArtemG - 注意“Pull in Nancy.Extensions”部分,即使用使用 Nancy.Extensions;在您的 using 子句中添加一行。
    【解决方案2】:

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

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

    同时

    var yourString = Request.Body.AsString(); 
    

    不再支持。

    【讨论】:

      【解决方案3】:

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

      对于代码,我可以通过执行类似的操作来获取正文

                  byte[] response = new byte[Request.Body.Length];
                  Request.Body.Read(response, 0, (int)Request.Body.Length);
      

                  string POSTParameters = System.Text.Encoding.Default.GetString(response);
      

      这正是我想要的。如果正文要更复杂,我不建议这样做,但我只会在这篇文章中简单介绍一下。

      【讨论】:

        【解决方案4】:

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

        var queryParam =  this.Request.Query.ParamName;
        

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

        this.Bind(); 
        

        这将使用主体中指定的属性创建动态。

        【讨论】:

          猜你喜欢
          • 2015-04-19
          • 1970-01-01
          • 2015-07-10
          • 2023-03-08
          • 2012-05-26
          • 2021-07-20
          • 2018-01-30
          • 2020-10-04
          • 1970-01-01
          相关资源
          最近更新 更多