我希望从失败的IAuthorizationFilter中设置结果操作。但是,我不确定如何从过滤器内部创建ActionResult。控制器似乎不能从过滤器内部访问,所以我通常的视图(“SomeView”)无法工作。有没有一种方法可以获得控件,或者另一种创建actionresult的方法,因为它看起来不是可实例化的?
不起作用:
[AttributeUsage(AttributeTargets.Method)]
public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext context)
{
if (!context.HttpContext.User.Identity.IsAuthenticated)
{
context.Result = View("User/Login");
}
}
}发布于 2008-09-21 09:32:03
您可以直接实例化相应的ActionResult,然后在上下文中设置它。例如:
public void OnAuthorization(AuthorizationContext context)
{
if (!context.HttpContext.User.Identity.IsAuthenticated)
{
context.Result = new ViewResult { ViewName = "Whatever" };
}
}发布于 2008-09-21 17:44:12
您应该看看MVC框架AuthorizeAttribute附带的IAuthorizationFilter实现。如果您使用的是表单身份验证,则无需将结果设置为User/Login。您可以发出一个401HTTP status响应,ASP.NET将为您重定向到登录页面。
将结果设置为user/login的一个问题是,用户的地址栏没有更新,因此它们将出现在登录页面上,但URL不匹配。对于一些人来说,这不是一个问题。但有些人希望他们网站的URL与用户在浏览器中看到的内容相对应。
https://stackoverflow.com/questions/110384
复制相似问题