尝试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/id访问www.example.com/login/index/id时,我想要我的网站

我将如何为此配置/添加路由,而不会打破我实际尝试访问www.example.com/controller其他页面?

编辑:不幸的是,id是一个字符串,所以我没有任何具体的限制,我可以想到这将工作。 想想也许代替ID我应该说公司名称或网站名称,所以url看起来像www.example.com/companyname。

迄今为止唯一的解决方案是为我的每个控制器添加一个maproute

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

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

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

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

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


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

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

你有没有尝试过首先添加这个映射:

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:有ids作为字符串值,我看到的唯一解决方案是手动添加每个控制器,如您所说,或添加如下所示:

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

);

这样你就不需要在将来更新每条路线。

链接地址: http://www.djcxy.com/p/36765.html

上一篇: MVC Routing Issue when trying www.example.com/id

下一篇: MVC Custom Routing Subdomain