繁体   English   中英

WebApi HttpPost 没有收到来自 HttpClient 的发布内容

[英]WebApi HttpPost not receiving the posted content from HttpClient

Web API:我也尝试在字符串 stringcontent 之前使用 [FormBody] 和 [FromForm]。

// POST api/<MAUserController>
        [HttpPost("AuthenticateUser")]
        public async Task<ActionResult<MAUser>> PostAsync(string stringcontent)
        {
            //stringcontent is null
        }

客户代码:

List<KeyValuePair<string, string>> postParameters = new List<KeyValuePair<string, string>>();
            postParameters.Add(new KeyValuePair<string, string>("Email", Email));
            postParameters.Add(new KeyValuePair<string, string>("Password", Password));
            var jsonString = JsonConvert.SerializeObject(postParameters);
            var stringContent = new StringContent(jsonString, Encoding.UTF8, "application/json");

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenString);
                //httpClient.DefaultRequestHeaders.Add("Email", Email);
                //httpClient.DefaultRequestHeaders.Add("Password", Password);
                using (var response = await httpClient.PostAsync(API_URL, stringContent))
                {
                    if (response.IsSuccessStatusCode)
                    {
            //Success code
                    }
                    else
                    {
            //Handle unsuccessful here
                    }
                }

您正在从客户端以 JSON 格式发布结构化数据。 那么为什么 API 只是试图接受一个纯字符串呢? 这没有多大意义。

您应该让它接受具有正确结构的 model object。 ASP.NET 将负责将 JSON 属性绑定到 model 属性。 但是,您还应该简化客户端中的postParameters - 您使结构过于复杂。

例如

客户:

var postParameters  = new { Email = "abc@example.com", Password = "xyz" };

服务器:

public async Task<ActionResult<MAUser>> PostAsync([FromBody] UserCredentials credentials)
{
}

其中UserCredentials是 DTO class,如下所示:

public class UserCredentials
{
  public string Email { get; set; }
  public string Password { get; set; }
}

好的,所以当使用内容类型时,您基本上是在告诉接收方 API 如何解析请求有效负载,因此通过告诉它 application/json 框架试图将有效负载从 JSON 解析为 object 并将其分配给您的参数(不是真的因为你需要添加一个属性 [FromBody] )但它不能这样做,因为你需要一个字符串,所以要么改变你的内容类型或改变你的参数类型(我会建议你的参数类型)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM