HTTP GET工作,但其他HTTP方法返回401 - Angular 9 Asp.Net Core 3.1 JWT授权。

问题描述 投票:0回答:1

症状。

  1. JWT授权工作正确。它不允许未经授权的用户访问受保护的方法,并且正确地授权拥有有效JWT Bearer头的用户(对于GET方法)。
  2. HTTP GET请求按预期行事。
  3. 以同样方式形成的HTTP POST、PUT和DELETE请求则返回401。
  4. 这只是浏览器的问题。Fiddler(邮递员)能够成功POST。

一个工作的GET REQUEST。

客户端:

this.http.get(this.baseUrl + "ControllerName/MethodName/" + id, {
  headers: new HttpHeaders({
    "Content-Type": "application/json",
    "Authorization": "Bearer " + token
  })
}).subscribe(response => {
  console.log(response);
}, err => {
  console.log(err);
});

Server -side:

    [HttpGet]
    [Authorize]
    public IActionResult MethodName(Guid id)
    {
        return Ok(JsonConvert.SerializeObject(id));
    }

POST REQUEST WHICH RETURNS 401. 客户端:

客户端: 服务器端: A POST REQUEST WHICH RETURNS 401: Client-side:

this.http.post(this.baseUrl + "ControllerName/MethodName/" + id, {
  headers: new HttpHeaders({
    "Content-Type": "application/json",
    "Authorization": "Bearer " + token
  })
}).subscribe(response => {
  console.log(response);
}, err => {
  console.log(err);
});

服务器端。

[HttpPost]
[Authorize]
public IActionResult MethodName(Guid id)
{
    return Ok(JsonConvert.SerializeObject(id));
}

有谁知道为什么一个授权的GET请求可以工作,而一个同样的POST请求,对于同样的方法却不能工作?

angular http asp.net-core post jwt
1个回答
1
投票

在angular的post方法中,第一个参数是url,第二个参数是body,第三个参数是options。

  this.http.post(this.baseUrl + "ControllerName/MethodName/" + id,null, {
      headers: new HttpHeaders({
        "Content-Type": "application/json",
        "Authorization": "Bearer " + token
      })
    }).subscribe(response => {
      console.log(response);
    }, err => {
      console.log(err);
    });
© www.soinside.com 2019 - 2024. All rights reserved.