httpContext.Request.GetRawBodyStringAsync()与[FromBody]字符串正文相同吗?

时间:2018-08-03 12:40:18

标签: c# asp.net .net-core asp.net-core-webapi

我正在努力弄清事情(抱歉愚蠢的问题)。 我收到了来自Apple设备客户端到我的wep api的消息请求,我想知道如何处理它。在.NET Framework中,我曾经使用以下方法处理消息:

 public async Task<HttpResponseMessage> Server(HttpRequestMessage request)
        {
            var message =  await request.Content.ReadAsStringAsync();

这工作正常,但移至.NET Core,请求始终为空。因此,我继续进行此操作(此操作在下面进行):

[HttpPut]
[Route("server")]
public async Task<IActionResult> DoSomething()
{
    var requestBody = await HttpContext.Request.GetRawBodyStringAsync();
}

但是我想知道上面是否是处理此类请求的正确方法,并且我也看到了[FromBody]的使用,并且想知道最好使用它,但这对我不起作用。

[HttpPut]
[Route("server")]
public async Task<IActionResult> DoSomething([FromBody] string requestBody)
{
   //doesn't get called?
}

1 个答案:

答案 0 :(得分:1)

您操作中的参数名称需要与请求中发送的属性名称匹配。

例如如果请求正在发送: varA=string1&varB=string2&varc=string3

然后您的操作方法应如下所示:

[HttpPut]
[Route("server")]
public async Task<IActionResult> DoSomething([FromBody] string varA,[FromBody] string varB,[FromBody] string varC)
{

}

或者,您可以为这些类型的请求提供模型类:

class RequestModel{
public string VarA {get;set;}
public string VarB {get;set;}
public string VarC {get;set;}
}

    [HttpPut]
    [Route("server")]
    public async Task<IActionResult> DoSomething([FromBody] RequestModel request)
    {

    }