MVC4动态控制器路径

本文关键字:路径 控制器 动态控制 动态 MVC4 | 更新日期: 2023-09-27 18:01:14

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

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

{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

MVC4动态控制器路径

您必须配置路由。例如,如果你有家庭控制器:

    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
        );

你可以这样做:

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

你可以像一样继续向url部分添加部分

 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();
    }

然后如果你传入这样一个url:

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

您的dynamicstring将具有值"test.nl",而其他任何东西都将具有"jordy"我希望这能帮助