我正在将 ASP.NET Core Razor Pages 7 与 Identity 结合使用。假设我导航到:
/non-existent-page
我希望它显示 404 页面,但它实际上重定向到登录页面并显示:
/login/?return=%2Fnon-existent-page
我登录后,会重定向到404页面。
我的配置:
services.AddAuthorization(x => {
x.FallbackPolicy = x.DefaultPolicy;
});
app.UseStatusCodePagesWithReExecute("/error", "?statusCode={0}")
[AllowAnonymous]
public void OnGet(int statusCode) { }
我该如何解决这个问题?
我从文档中的此页面找到了解决此问题的方法。但是,该代码不正确。
但是,这个更新后的代码确实有效:
public class NotFoundAwareAuthorizationMiddlewareResultHandler : IAuthorizationMiddlewareResultHandler
{
private readonly AuthorizationMiddlewareResultHandler _defaultHandler = new();
public async Task HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
{
if (authorizeResult.Challenged && context.GetEndpoint() == null)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return;
}
await _defaultHandler.HandleAsync(next, context, policy, authorizeResult);
}
}
尽管它对我有用,但我不确定它是否完全合适。例如:
authorizeResult.Forbidden
,我认为在这种情况下毫无意义authorizeResult.AuthorizationFailure!.FailedRequirements
但始终为空context.GetEndpoint() == null
,这是丢失页面的情况,而对于现有页面来说它将是非空的;我希望那里没有问题我在 docs repo 中添加了一个问题,要求他们修复它。如果您也需要的话请点赞
如果您有更好的方法,或者在我的代码中发现错误,请添加答案,我会接受它。