簡體   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