Asp.net mvc 4 MVC4URL路由:可选参数

Asp.net mvc 4 MVC4URL路由:可选参数,asp.net-mvc-4,url-routing,Asp.net Mvc 4,Url Routing,在我的MVC4应用程序中,我希望根据客户端向用户显示数据。我想通过URL路由实现这一点 e、 g. 1. 2. 这里,“abc”和“xyz”被称为客户端代码。若用户输入第一个url,那个么应用程序将连接到客户端“abc”的数据库。若用户输入第二个url,那个么它将连接到客户端“xyz”的数据库 我想实现上述功能。那么我应该如何利用路由呢 我在RouteConfig中使用了以下代码- routes.MapRoute( name: "Default",

在我的
MVC4
应用程序中,我希望根据客户端向用户显示数据。我想通过
URL路由
实现这一点
e、 g.
1.
2.

这里,“abc”和“xyz”被称为客户端代码。若用户输入第一个url,那个么应用程序将连接到客户端“abc”的数据库。若用户输入第二个url,那个么它将连接到客户端“xyz”的数据库

我想实现上述功能。那么我应该如何利用路由呢

我在RouteConfig中使用了以下代码-

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

提前感谢。

您只能在ASP.NET MVC中选择最后一个参数。不要更改默认路由,而是为此特定URL创建新路由。确保在默认路由之前添加此路由

routes.MapRoute(
           name: "Login",
           url: "{clientcode}/account/login",
           defaults: new { clientcode = UrlParameter.Optional, controller = "Account", action = "Login" }
       );

您可以通过阅读
ControllerContext.RouteData
来实现这一点。
RouteData
对象包含
RouteValueDictionary
,您可以读取和查询
clientcode
。例如:

var clientCode = ControllerContext.RouteData.Values["clientcode"];

if (String.IsNullOrWhiteSpace(clientCode))
{
    // Set to a default value
    clientCode = "default_value";
}

// Do something with clientCode

return ViewResult(); // or RedirectToAction("ActionName")

仅此而已。

当您点击这些URL时会发生什么?很抱歉,描述不完整。若用户输入的url并没有客户端代码,例如,那个么应用程序应该连接到默认数据库。另一方面,它应该连接到特定于客户端的数据库。我可以从clientcode获取数据库连接字符串,因此我必须从url(RouteData)读取clientcode。我上面提到的url是虚拟url。