代码之家  ›  专栏  ›  技术社区  ›  PKCS12

httpContext.Request.GetRawBodyStringAsync()是否与[FromBody]字符串体相同?

  •  0
  • PKCS12  · 技术社区  · 7 年前

    我在想些事情(抱歉问了些愚蠢的问题)。 我收到一个来自苹果设备客户端的消息请求到我的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 回复  |  直到 7 年前
        1
  •  1
  •   Aman B    7 年前

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

    例如,如果请求正在发送: 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)
        {
    
        }
    
    推荐文章