我有一个MVC API控制器,其中包含以下操作。
我不明白如何读取“Message”的实际数据/正文内容?
[HttpPost]
public void Confirmation(HttpRequestMessage request)
{
var content = request.Content;
}
我有一个MVC API控制器,其中包含以下操作。
我不明白如何读取“Message”的实际数据/正文内容?
[HttpPost]
public void Confirmation(HttpRequestMessage request)
{
var content = request.Content;
}
using System.IO;
string requestFromPost;
using( StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream) )
{
reader.BaseStream.Position = 0;
requestFromPost = reader.ReadToEnd();
}
我建议您不要像这样操作。行为方法应该设计成易于单元测试。在这种情况下,您不应直接从请求中访问数据,因为如果您这样做,当您想要对该代码进行单元测试时,您必须构造一个HttpRequestMessage
。
您应该这样做,让MVC为您完成所有模型绑定:
[HttpPost]
public void Confirmation(YOURDTO yourobj)//assume that you define YOURDTO elsewhere
{
//your logic to process input parameters.
}
如果您确实需要访问请求,您只需访问控制器的 Request 属性(而不是通过参数)。像这样:
[HttpPost]
public void Confirmation()
{
var content = Request.Content.ReadAsStringAsync().Result;
}
在MVC中,Request属性实际上是一个围绕.NET HttpRequest的包装器,并从一个基类继承而来。当您需要进行单元测试时,也可以模拟此对象。如果您想转换为一个类而不仅仅是一个字符串:
YourClass model = await request.Content.ReadAsAsync<YourClass>();
request.Content
中得到什么? - Mansfield