如何获取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时,你也可以模拟这个对象。