【发布时间】:2026-01-05 02:45:01
【问题描述】:
如果用户没有正确的权限,我想生成一个401页面。
用户请求一个 url 并被重定向到登录页面(我在 web.config 中拒绝了所有匿名)。用户登录成功并被重定向到原始 url。但是,经过权限检查,确定用户没有所需的权限,所以我想生成一个 401。但是 Forms Authentication 总是处理 401 并将用户重定向到登录页面。
对我来说,这是不正确的。用户已经认证,只是用户没有适当的授权。
在其他场景中,例如在 ajax 或 REST 服务场景中,我绝对不想要登录页面 - 我需要正确的 401 页面。
到目前为止,我已经尝试自定义授权过滤器以返回带有 401 的 ViewResult,但没有奏效。然后我尝试了一个普通的动作过滤器,覆盖了 OnActionExecuting,它也不起作用。
我能够做的是处理 global.asax 中的一个事件,PostRequestHandlerExecute,并检查权限,然后直接写出响应:
if (permissionDenied)
{
Context.Response.StatusCode = 401;
Context.Response.Clear();
Context.Response.Write("Permission Denied");
Context.Response.Flush();
Context.Response.Close();
return;
}
这行得通,但这并不是我真正想要的。 首先,我什至不确定这是否是正确的事件或正在筹备中的地方。 其次,我希望 401 页面有更多的内容。最好,它应该是一个 aspx 页面,其母版页可能与站点的其余部分相同。这样,任何浏览该站点的人都可以看到权限被拒绝但具有相同的外观和感觉等,但 ajax 或服务用户将获得正确的状态代码以进行操作。
知道如何实现吗? 我看过其他有类似要求的帖子,但没有看到我可以使用的解决方案。
不,我不想要 403。
【问题讨论】:
标签: asp.net asp.net-mvc authorization action-filter