尝试www.example.com/id时出现MVC路由问题

假设我有一个网站 www.example.com

默认路由看起来像

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);

好的,但是当我去 www.example.com/idwww.example.com/login/index/id 时我们想要我的网站

我如何为此配置/添加路由,而不是打破我实际上尝试去 www.example.com/controller 的其他页面?

编辑:不幸的是id是一个字符串所以我没有任何具体的约束,我可以想到这将有效 . 想想也许而不是id我应该说公司名称或网站名称,所以网址看起来像www.example.com/companyname .

到目前为止,我提出的唯一解决方案是为我的每个控制器添加一个maproute

routes.MapRoute(name:“Home”,url:“Home / / ”,默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional});

routes.MapRoute(name:“Settings”,url:“Settings / / ”,默认值:new {controller =“Settings”,action =“Index”,id = UrlParameter.Optional});

routes.MapRoute(name:“companyname”,url:“”,默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional});

routes.MapRoute(name:“default”,url:“ / / ”,默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional});

这将工作,但我有很多控制器,如果我将来添加一个,忘记调整路线,它将失败 . 这也不太可能,但如果一个公司名称与我的一个控制器名称相同,那么它也会失败 .

回答(3)

3 years ago

在控制器中,您可以重定向到另一个控制器/操作:

public ActionResult yourAction()
{
  return  RedirectToAction("nameAction","nameController");
}

3 years ago

您是否尝试过首先添加此映射:

routes.MapRoute( name: "Custom", url: "{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } );

这应该有效,但请记住,路线是经过精确评估的,因此您必须组织映射才能覆盖您网站中的所有网页 .

例如,www.example.com/Product等路线可能会被错误地重定向到/登录 .

编辑:您可以添加约束,因此如果id是一个int值,您可以尝试使用以下内容:

routes.MapRoute("Custom", "{id}",
                new { controller = "Login", action = "Index" },
                new { id = @"\d+" }

编辑2:将id作为字符串值,我看到的唯一解决方案是按照你的说法手动添加每个控制器,或者添加如下内容:

routes.MapRoute(
name: "Default",
url: "app/{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }

);

这样,您将来不需要更新每条路线 .

3 years ago

请尝试以下路由

routes.MapRoute(name: "companylogin", url: "companylogin/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });

        routes.MapRoute(name: "default", url: "{controller}/{action}/{id}", defaults: new
        {
            controller = "Login",
            action = "Index",
            id = UrlParameter.Optional
        });

删除其他控制器特定路由 . 现在,您可以使用URL导航到登录: - www.example.com/companylogin/和所有其他URL重定向默认路由 .