MVC路由问题(删除控制器并且是整个应用程序中URLS的名称,与区域无关.i:e URL仅包含操作)

时间:2016-01-22 09:28:09

标签: .net asp.net-mvc routing

我在RouteConfig.cs文件中定义了两个路由。第二个用于登录,第一个是登录后的登录页面。

1 RouteConfig.cs

routes.MapRoute("TMCDefault", "{action}/{id}", new { controller = "TMC", action = "TMC", id = UrlParameter.Optional }).DataTokens.Add("area", "TMC"); ;
routes.MapRoute("Default", "{action}/{id}", new { controller = "Account", action = "LogIn", id = UrlParameter.Optional }).DataTokens.Add("area", "Account");

当我运行应用程序时,它会尝试执行第一个路径而不是默认的root.But如果我按相反顺序放置路由它会启动登录页面,但在验证用户后,登录页面会给出404错误。

以下是我的AreaRegistration文件路由

2用于登录

 public override void RegisterArea(AreaRegistrationContext context)
    {

        context.MapRoute(
        "Account_default",
        "{action}/{id}",
        new { action = "LogIn", id = UrlParameter.Optional },
        new { controller = "(Account)" }
    );
着陆页

3

  context.MapRoute(
           "default_TMC",
           "{action}/{id}",
           new { action = "Index", id = UrlParameter.Optional },
           new { controller = "(TMC)" }
        );

实现的目的是删除控制器名称,并且无论区域如何,都是URLS中的名称。这意味着网址只包含操作

2 个答案:

答案 0 :(得分:0)

  

要调用默认根目录,您需要在自己的中提及   App_Start.RouteConfig.cs文件如下

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { area="Account",controller = "Account", action = "LogIn", id = UrlParameter.Optional },
                namespaces:new string[] {"YOUR PROJECT NAMESPACE"}
            );
        }
  

由于这两个控制器存在于两个不同的区域,所以你   需要更改您的区域AccountAreaRegistration.cs&的代码。 TMCAreaRegistration.cs文件如下

public override void RegisterArea(AreaRegistrationContext context)
    {

        context.MapRoute(
        "Account_default",
        "Account/{controller}/{action}/{id}",
        new { area="Account",controller = "Account",action = "LogIn", id = UrlParameter.Optional }
    );
  

TMCRegistrationArea.cs文件

public override void RegisterArea(AreaRegistrationContext context)
    {

        context.MapRoute(
        "Account_default",
        "TMC/{controller}/{action}/{id}",
        new { area="TMC",controller = "TMC",action = "Index", id = UrlParameter.Optional }
    );

答案 1 :(得分:0)

这可以完成,但不是像你暗指的那样在一次通话中完成。您需要将每个操作注册为具有相应操作/控制器/区域的路径。

实施例

context.MapRoute(
            "Account_LogOff",
            "LogOff",
            new { action = "LogOff", controller="Account", area="Account", id = UrlParameter.Optional }
        );

希望这有助于其他任何想要这样做的人。