【问题标题】:MVC4 URL Routing : Optional parameterMVC4 URL 路由:可选参数
【发布时间】:2013-05-31 12:16:39
【问题描述】:

在我的MVC4 应用程序中,我想根据客户端向用户显示数据。我想使用URL routing 来实现这一点。
例如
1.http://mysite.com/abc/account/login
2.http://mysite.com/xyz/account/login

在这里,“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 }
       );

提前致谢。

【问题讨论】:

  • 点击这些网址会发生什么?
  • 抱歉描述不完整。如果用户输入没有客户端代码的 url,例如mysite.com/account/login ,然后应用程序应该连接到默认数据库。否则它应该连接到特定于客户端的数据库。我可以从客户端代码中获取数据库连接字符串,为此我必须从 url (RouteData) 中读取客户端代码。我上面提到的url是dummy url。

标签: asp.net-mvc-4 url-routing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以通过阅读ControllerContext.RouteData 来实现这一点。 RouteData 对象包含 Values 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")
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 2016-07-17
      • 2013-11-03
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多