首页 > 解决方案 > 正在发送 HTTP 标头,但 Request.Headers 中不存在

问题描述

我的 api 端代码如下所示:

[HttpPost]
[Route("api/Login")]
public HttpResponseMessage ValidateLogin(UserModel user)
{
    IEnumerable<string> customJsonInputString;

    if (!Request.Headers.TryGetValues("Content-Type", out customJsonInputString))
        return new HttpResponseMessage(HttpStatusCode.BadRequest);

    var customJsonInputArray = customJsonInputString.ToArray();

    var ProductsRequest =
      Newtonsoft.Json.JsonConvert.DeserializeObject<UserModel>(customJsonInputArray[0]);

    var result = _service.Fetch(
            new UserModel
            {
                Username = user.Username,
                Password = user.Password.GenerateHash()
            }
        );
    return Request.CreateResponse(HttpStatusCode.OK, result);
}

我正在尝试从位于同一解决方案中的单独项目中调用它:

[HttpPost]
public async Task<ActionResult> Login(UserLoginModel user)
{
    UserModel data = new UserModel
    {
        Username = user.Username,
        Password = user.Password
    };

    using (var client = new HttpClient())
    {
        var myContent = JsonConvert.SerializeObject(data);
        var buffer = Encoding.UTF8.GetBytes(myContent);
        var byteContent = new ByteArrayContent(buffer);
        byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var endpoint = "http://localhost:55042/api/Login";

        var response = await client.PostAsync(endpoint, byteContent);

        throw new NotImplementedException();
    }
}

我认为问题出在Request.Headers.TryGetValues("Content-Type", out customJsonInputString)-s 第一个参数名称中,我已经在网上搜索过,但没有提出正确的描述/解释该参数名称应该是什么(好吧,我知道它是一个标题名称,但我试过了用“ContentType”也可以找到它,结果是一样的:“400 bad request”),所以我的问题是:

标签: c#asp.netasp.net-mvcasp.net-web-api

解决方案


尝试像这样更新您的代码:

using (var client = new HttpClient())
        {
            var myContent = JsonConvert.SerializeObject(data);                
            var endpoint = "http://localhost:55042/api/Login";    
            var response = await client.PostAsync(endpoint, new StringContent(myContent, Encoding.UTF8,"application/json"));
        }

推荐阅读