Asp.net mvc IAuthorizationFilter的设置结果

Asp.net mvc IAuthorizationFilter的设置结果,asp.net-mvc,Asp.net Mvc,我希望从失败的IAuthorizationFilter设置结果操作。但是,我不确定如何从过滤器内部创建ActionResult。控制器似乎无法从过滤器内部访问,因此我的常用视图(“SomeView”)无法工作。有没有一种方法可以获取控件,或者有其他方法可以创建actionresult,因为它看起来不可实例化 不起作用: [AttributeUsage(AttributeTargets.Method)] public sealed class RequiresAuthenticat

我希望从失败的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");
        }
    }
}

您可以直接实例化适当的ActionResult,然后在上下文中设置它。例如:

public void OnAuthorization(AuthorizationContext context)
{
    if (!context.HttpContext.User.Identity.IsAuthenticated)
    {
        context.Result = new ViewResult { ViewName = "Whatever" };
    }
}

您应该看看MVC框架authorizationFilter的实现,authorizationAttribute。如果您使用的是表单身份验证,则无需将结果设置为User/Login。您可以发出401HTTP状态响应,ASP.NET将为您重定向到登录页面

将结果设置为user/login的一个问题是,用户的地址栏没有更新,因此它们将出现在登录页面上,但URL不匹配。对一些人来说,这不是一个问题。但是有些人希望他们网站的URL与用户在浏览器中看到的内容相对应