首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >404设置区域路由后的登录和LogOff方法

404设置区域路由后的登录和LogOff方法
EN

Stack Overflow用户
提问于 2014-11-28 20:11:38
回答 1查看 156关注 0票数 0

我有一个使用application 2和Fluentsecurity的MVC5应用程序,它在Home控制器中使用以下方法来处理登录页面和注销:

代码语言:javascript
运行
复制
public ActionResult Login(string returnUrl)
    {
        this.ViewBag.ReturnUrl = returnUrl;
        return this.View();
    }

public ActionResult LogOff()
    {
        this.AuthenticationManager.SignOut();
        return this.RedirectToAction("Login", "Home");
    }

这绝对可以正常工作。

我现在需要在我的应用程序中添加一个区域,并相应地设置路由。我已经在'Areas‘文件夹下添加了一个名为'Admin’的子文件夹,并将相关的控制器和视图放在其中的相应子文件夹中。

然后,我在Global.asax中设置了如下路由:

代码语言:javascript
运行
复制
private static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "AppName.Web.Controllers " });

        routes.MapRoute(
            "Admin",
            "Admin/{controller}/{action}/{querydata}",
            new { querydata = UrlParameter.Optional },
        new[] { "AppName.Web.Areas.Admin.Controllers" });

    }

然后调用,如下所示:

代码语言:javascript
运行
复制
private void Application_Start(object sender, EventArgs e)
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        SecurityConfigurator.Configure(SecurityConfig.Configure);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        FilterConfig.RegisterGlobalApiFilters(GlobalConfiguration.Configuration.Filters);

        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.DefaultNamespaces.Add("AppName.Web.Areas.Admin.Controllers");

    }

如果我随后运行该应用程序,路由在我所在的区域和主应用程序中工作正常,除了它似乎破坏了前面提到的主控制器中的Login和LogOff方法,现在在尝试访问它们时给出了一个404错误。不过,同一个Home控制器的索引方法运行良好。

如果它与Fluentsecurity相关,那么安全性是这样配置的:

代码语言:javascript
运行
复制
internal static void Configure(ConfigurationExpression configuration)
    {
        configuration.GetAuthenticationStatusFrom(() => HttpContext.Current.User.Identity.IsAuthenticated);
        configuration.GetRolesFrom(GetRoles);

        configuration.For<HomeController>(x => x.Login(default(string))).DenyAuthenticatedAccess();
        configuration.For<HomeController>(x => x.Index()).DenyAnonymousAccess();
        configuration.For<HomeController>(x => x.LogOff()).AllowAny();

        //Admin Home
        configuration.For<Areas.Admin.Controllers.HomeController>(x => x.Index()).DenyAnonymousAccess();

    }

你知道我可能会出错的地方吗?

EN

回答 1

Stack Overflow用户

发布于 2014-11-30 22:05:49

代码语言:javascript
运行
复制
private static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "Admin",
            "Admin/{controller}/{action}/{querydata}",
            new { querydata = UrlParameter.Optional },
        new[] { "AppName.Web.Areas.Admin.Controllers" });

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "AppName.Web.Controllers " });



    }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27188402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档