MVC4动态控制器路径?

时间:2013-02-26 09:07:50

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我的MVC4项目中有一个SiteController类,'Site'网址工作正常,但我需要在'网站'后面有一个动态网址部分,我需要网址看起来像这样:

mysite.com/Site/ {DYNAMICSTRING} /用户(或其他)

{DYNAMICSTRING}可以是子网站的名称,因此控制器应检查该子网站是否确实存在于数据库中。

现在我正在使用查询字符串,但这不是我的客户想要的。

我该怎么做?

其他详情

我的路线:

    routes.MapRoute(
                "Subdomain",                                              // Route name
                "{controller}/{action}/{dynamicString}",                           // URL with parameters
                new { controller = "Site", action = "Subdomain" }  // Parameter defaults
            );

我的控制器:

    public ActionResult Subdomain(string dynamicString)
    {
        return View();
    }

当我导航到:/ Site / Subdomain / SomeString

时,dynamicString的值为null

2 个答案:

答案 0 :(得分:3)

您必须配置路由。例如,如果你有Homecontroller:

    public class HomeController:Controller
    {
        public ActionResult Subdomain(string dynamicString)
        {
            return View();
        }
    }

然后你必须像你那样配置你的路由

routes.MapRoute(
            "Subdomain",                                              // Route name
            "{controller}/{action}/{dynamicString}/anyOtherParams",                           // URL with parameters
            new { controller = "Home", action = "Subdomain", dynamicString = "" }  // Parameter defaults
        );

答案 1 :(得分:1)

你可以这样做:

routes.MapRoute(
            name: "Default", // Route name
            url:"Site/{dynamicstring}", // URL with parameters
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );

您可以继续将部件添加到网址部分

 url:"Site/{dynamicstring}/{anythingelse}" //  url:"Site/{dynamicstring}/{anythingelse}/{bla}/Test/{hello}/etc..."

或者您也可以捕获所有这样的路线:“

routes.MapRoute(
            name: "Default", // Route name
            url:"{*all}", // catch all
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );

并通过将它们拆分为/

来获取控制器索引操作中的所有其他部分

确保将自定义路线放在默认路线之前,否则默认路线会将其取出。

在你的控制器中你得到这样的东西:

public ActionResult Index(string dynamicstring, string anythingelse)
    {

        return View();
    }

如果你然后传入这样的网址:

  

http://www.mysite.com/Site/test.nl/jordy

你的dynamicstring将具有值“test.nl”并且你的anythingelse将具有“jordy” 我希望这有帮助