如果用户没有正确的权限,我想生成一个401页面。
当用户请求一个URL时,会被重定向到登录页面(我在web.config中禁止了所有匿名用户)。用户成功登录后,将被重定向回原始URL。然而,在权限检查时,确定用户没有所需的权限,因此我想生成一个401错误代码。但是Forms身份验证总是处理401并将用户重定向到登录页面。
对我来说,这不正确。用户已经进行了身份验证,只是没有正确的授权。
在其他场景中,比如ajax或REST服务场景,我绝对不希望出现登录页面 - 我需要正确的401页面。
到目前为止,我尝试过自定义授权筛选器以返回具有401状态码的ViewResult,但没有成功。然后,我尝试了正常的Action Filter,覆盖了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。