我有一个MVC API控制器,具有以下操作.
我不明白如何阅读消息的实际数据/正文?
[HttpPost]
public void Confirmation(HttpRequestMessage request)
{
var content = request.Content;
}
Run Code Online (Sandbox Code Playgroud)
Man*_*eld 75
从这个答案:
[HttpPost]
public void Confirmation(HttpRequestMessage request)
{
var content = request.Content;
string jsonContent = content.ReadAsStringAsync().Result;
}
Run Code Online (Sandbox Code Playgroud)
注意:如注释中所示,此代码可能会导致死锁,因此不应使用.有关详细信息,请参阅此博客文章.
Zeb*_*Lin 23
System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Current.Request.InputStream);
reader.BaseStream.Position = 0;
string requestFromPost = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
Kha*_* TO 11
我建议你不应该这样做.行动方法应设计成易于单元测试.在这种情况下,您不应该直接从请求中访问数据,因为如果您这样做,当您想要对此代码进行单元测试时,您必须构造一个HttpRequestMessage.
你应该这样做让MVC为你做所有的模型绑定:
[HttpPost]
public void Confirmation(YOURDTO yourobj)//assume that you define YOURDTO elsewhere
{
//your logic to process input parameters.
}
Run Code Online (Sandbox Code Playgroud)
如果您确实想要访问该请求.您只需访问控制器的Request属性(而不是通过参数).像这样:
[HttpPost]
public void Confirmation()
{
var content = Request.Content.ReadAsStringAsync().Result;
}
Run Code Online (Sandbox Code Playgroud)
在MVC中,Request属性实际上是.NET HttpRequest的包装器,并从基类继承.当你需要进行单元测试时,你也可以模拟这个对象.
| 归档时间: |
|
| 查看次数: |
90948 次 |
| 最近记录: |