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

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

已引入的版本

ASP.NET Core 5.0

旧行为

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

新行为

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

更改原因

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

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

可以使用SetSwitch恢复到以前的行为。 例如:

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

受影响的 API

没有