尝试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