2017-10-01 3 views
-2

これはASP.NET Gurus向けのものです。ASP.NETでHTTP POST要求の完全な生の本文を読み取る方法は?

私はASP.NET Web Api 2を使用していますが、POSTの全身を読むための解決策がない理由を理解できません要求。

これは私が私の質問が重複としてマークされた後にしようとしたものです:Aはまた、このようにそれを試みた

[System.Web.Http.ActionName("Receive")] 
    [HttpPost] 
    public IHttpActionResult ReceivePost(HttpActionContext actionContext) 
    { 
     Task<string> content = actionContext.Request.Content.ReadAsStringAsync(); 
     string body = content.Result; 
     File.AppendAllText(System.Web.Hosting.HostingEnvironment.MapPath(@"~/Path/To/My/Log.txt"),body); 
     return Ok(); 
    } 

:結果

[System.Web.Http.ActionName("action")] 
    [HttpPost] 
    public IHttpActionResult ReceivePost() 
    { 
     Task<string> content = Request.Content.ReadAsStringAsync(); 
     string body = content.Result; 
     File.AppendAllText(System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/Path/To/My/Log.txt"),body); 
     return Json(HttpStatusCode.OK); 
    } 

を、私は何もなく、エラー500ノーを取得します本文があるPOSTがWebHookに送信されたときに作成されるファイルです。

私が理解できないこと:なぜ2番目の例では何も受け取られませんか?

は、ここで提案された「ソリューション」から別のものです:再び

[System.Web.Http.ActionName("action")] 
    [HttpPost] 
    public IHttpActionResult ReceivePost(System.Web.HttpRequestBase Request) 
    { 
     string documentContents; 
     using (Stream receiveStream = Request.InputStream) 
     { 
      using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8)) 
      { 
       documentContents = readStream.ReadToEnd(); 
      } 
     } 
     File.AppendAllText(System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/path/To/My/Log.txt"), documentContents); 
     return Json(HttpStatusCode.OK); 
    } 

- この1は、このいずれかを可能な解決策としてマークされていたが、残念ながら、これは動作しないとエラー500

を返します。エラー500:

[System.Web.Http.ActionName("action")] 
    [HttpPost] 
    public IHttpActionResult ReceivePost() 
    { 
     var result = System.Web.HttpContext.Current.Request.Form; 
     var output = JsonConvert.SerializeObject(result); 
     File.AppendAllText(System.Web.Hosting.HostingEnvironment.MapPath(@"~/App_Data/Logs/Log.txt"), output); 
     return Json(HttpStatusCode.OK); 
    } 

他のアイデアは他にもありますか?

これは重複した質問ではありませんが、これは類似した問題で、提供された解決策がないため、別の解決策が必要です。

+1

望むすべて(https://gist.github.com/leggetter/769688)[C#を使用してHTTPリクエストのボディを取得する方法] – rmjoia

答えて

-1

非常に簡単

System.Web.HttpContext.Current.Request.Form 

あなたは

+0

感謝を与えますあなたは答えるために!残念ながら、それは私に何が欲しいのか分かりません。 –

関連する問題