Asp.net mvc 尝试www.example.com/id时出现MVC路由问题
假设我有一个网站Asp.net mvc 尝试www.example.com/id时出现MVC路由问题,asp.net-mvc,asp.net-mvc-5,routes,Asp.net Mvc,Asp.net Mvc 5,Routes,假设我有一个网站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
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是一个字符串,所以我没有任何具体的约束条件,我认为这是可行的。想一想,也许我应该说companyname或sitename,而不是id,这样URL看起来像www.example.com/companyname
到目前为止,我提出的唯一解决方案是为我的每个控制器添加一个maproute,如下所示
routes.MapRoute(
name: "Home",
url: "Home/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Settings",
url: "Settings/{action}/{id}",
defaults: new { controller = "Settings", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "companyname",
url: "{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 }
);
这将起作用,但我有许多控制器,如果我在未来添加一个,而忘记调整路由,它将失败。同样,这不太可能,但是如果一个companyname恰好与我的一个控制器名称相同,它也会失败 在控制器中,您可以重定向到另一个控制器/操作:
public ActionResult yourAction()
{
return RedirectToAction("nameAction","nameController");
}
在控制器中,您可以重定向到另一个控制器/操作:
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这样的路由可能会被错误地重定向到/Login
编辑:您可以添加约束,因此如果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 }
))
这样以后就不需要更新每条路线。您是否先尝试添加此映射:
routes.MapRoute( name: "Custom", url: "{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } );
这应该是可行的,但请记住,路由是经过独立评估的,因此您必须组织映射,以便访问站点中的所有页面
例如,像www.example.com/Product这样的路由可能会被错误地重定向到/Login
编辑:您可以添加约束,因此如果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 }
))
这样以后就不需要更新每条路线。请尝试下面的路线
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/{id}和所有其他url重定向默认路由 请尝试下面的路由
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/{id}和所有其他url重定向默认路由 我确实尝试过,但正如您所说,这会导致我的其他控制器进入www.example.com/Product,然后进入我的登录控制器,而不是我的产品控制器。不幸的是,id是一个字符串。例如,它可以是companyname。我已经编辑了我的问题。也许你可以尝试使用动作过滤器,这样如果它是一个公司名称,你可以重定向到任何你需要的动作。请看,我确实尝试过,但正如您所说,这会导致我的其他控制器进入www.example.com/Product,然后进入我的登录控制器,而不是我的产品控制器。不幸的是,id是一个字符串。例如,它可以是companyname。我已经编辑了我的问题。也许你可以尝试使用动作过滤器,这样如果它是一个公司名称,你可以重定向到任何你需要的动作。看见