开发者

Get the route when unauthenticated/logout with mvc?

开发者 https://www.devze.com 2022-12-16 22:44 出处:网络
I have this piece of code: public class Authenticate : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext)

I have this piece of code:

public class Authenticate : ActionFilterAttribute
{

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.HttpContext.Response.Redirect("/");   
        }
    } 
}

I was wonde开发者_如何学Cring if it is possible to make it redirect to the view for action="Login" controller="AdminLogin"? And how do I pass some message to the login view that tells "you need to login to access that" or similar?

/M


Here is how I solved the redirect-part:

public class Authenticate : ActionFilterAttribute
{

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            RedirectToRoute(filterContext,
                new
                {
                    controller = "AdminLogin",
                    action = "AdminLogin"
                });
        }
    }



    private void RedirectToRoute(ActionExecutingContext context, object routeValues)
    {
        var rc = new RequestContext(context.HttpContext, context.RouteData);

        string url = RouteTable.Routes.GetVirtualPath(rc,
            new RouteValueDictionary(routeValues)).VirtualPath;

        context.HttpContext.Response.Redirect(url, true);
    }

}

Not sure if it is optimal but seems to do the job correctly

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号