これは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);
}
他のアイデアは他にもありますか?
これは重複した質問ではありませんが、これは類似した問題で、提供された解決策がないため、別の解決策が必要です。
望むすべて(https://gist.github.com/leggetter/769688)[C#を使用してHTTPリクエストのボディを取得する方法] – rmjoia