使用ASP.NET Core API调用的Postman请求未经授权

4

我刚刚创建了一个ASP.NET Core应用程序,现在正在尝试测试一个Web API调用,该调用使用以下控制器方法创建一个项目。但是,我正在按照此页面上的说明进行操作(https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api),该页面使用Postman测试该方法。

[HttpPost]
[Route("api/asset")]
public IActionResult Create([FromBody] Asset asset)
{
    if (!ModelState.IsValid)
    {
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return null;
    }
    AssetItems.Add(asset);
    return CreatedAtRoute("GetAsset", new { id = asset.Id }, asset);
}

但是当我使用Postman发送请求时,出现了以下错误:

HTTP错误 401.2 - 未经授权 您无权查看此页面,因为身份验证标头无效。


检查是否已将身份验证/授权过滤器添加到请求管道中。根据创建项目时使用的项目模板,可能已经添加了该过滤器。控制器是否具有[Authorize]属性? - Nkosi
2个回答

2

检查是否已将身份验证/授权过滤器添加到请求管道中。可能是基于创建项目时使用的项目模板而添加的。

如果控制器具有[Authorize]属性,则删除它应该允许请求通过。

但是,如果全局添加了授权过滤器,则您可能需要在操作或控制器上添加[AllowAnonymous]属性,以便允许该操作或控制器的请求通过。

[HttpPost]
[AllowAnonymous]
[Route("api/asset")]
public IActionResult Create([FromBody] Asset asset) { ... }

我移除了所有的[Authorize]属性,并在我的操作中添加了[AllowAnonymous],但仍然无法正常工作,得到相同的结果。我获得了更多关于错误信息的信息,也许这可以帮助解决问题:“当发送到Web服务器的WWW-Authenticate标头不受服务器配置支持时,就会发生此错误。” - Ray
那么就不要发送那个头部。从 Postman 请求中删除它。 - Nkosi
我尝试移除标题,但结果仍然相同。 - Ray

1

如果您正在使用Visual Studio调试器运行API,则需要检查您的launchsettings.json文件;如果您正在从IIS运行API,则需要检查您的web.config文件。

在我的情况下,我有:

    "windowsAuthentication": true,
    "anonymousAuthentication": false,

"anonymousAuthentication" 更新为 true 可以解决我的问题。


我没有确切的理由来解释为什么这样可以解决问题,但我认为您的浏览器必须确认您在本机上已通过身份验证,并将此信息传递给API。然而,Postman不知道您在本地计算机上已通过身份验证。希望有人能够确认是否是这种情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接