授权:终结点路由中的资源为 HttpContext

在 ASP.NET Core 3.1 中使用终结点路由时,用于授权的资源是终结点。 此方法不足以获取对路由数据 (RouteData) 的访问权限。 以前在 MVC 中,已传入 HttpContext 资源,这允许访问终结点 (Endpoint) 和路由数据。 此更改可确保传递给授权的资源始终是 HttpContext

引入的版本

ASP.NET Core 5.0

旧行为

使用终结点路由和授权中间件 (AuthorizationMiddleware) 或 [Authorize] 属性时,传递给授权的资源是匹配的终结点。

新行为

终结点路由将 HttpContext 传递给授权。

更改原因

可以从 HttpContext 访问终结点。 但是,无法从终结点访问路由数据等内容。 非终结点路由导致了功能丢失。

如果应用使用终结点资源,请对 HttpContext 调用 GetEndpoint 以继续访问终结点。

你可以通过 SetSwitch 还原到以前的行为。 例如:

AppContext.SetSwitch(
    "Microsoft.AspNetCore.Authorization.SuppressUseHttpContextAsAuthorizationResource",
    isEnabled: true);

受影响的 API