如何获取HttpRequestMessage数据

我有一个MVC API控制器与以下操作。

我不明白如何读取消息的实际数据/正文?

[HttpPost] public void Confirmation(HttpRequestMessage request) { var content = request.Content; } 

从这个答案 :

 [HttpPost] public void Confirmation(HttpRequestMessage request) { var content = request.Content; string jsonContent = content.ReadAsStringAsync().Result; } 
  System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Current.Request.InputStream); reader.BaseStream.Position = 0; string requestFromPost = reader.ReadToEnd(); 

我build议你不要这样做。 行动方法应该devise成容易进行unit testing。 在这种情况下,你不应该直接从请求中访问数据,因为如果你这样做,当你想unit testing这个代码时,你必须构造一个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的一个包装,并从基类inheritance。 当你需要unit testing时,你也可以模拟这个对象。