Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4动态控制器路径?_C#_Asp.net Mvc_Asp.net Mvc 4_Asp.net Mvc Routing - Fatal编程技术网

C# MVC4动态控制器路径?

C# MVC4动态控制器路径?,c#,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,在我的MVC4项目中,我有一个SiteController类,“Site”url工作正常,但我需要在“Site”之后有一个动态url部分,我需要url如下所示: routes.MapRoute( name: "Default", // Route name url:"Site/{dynamicstring}", // URL with parameters defaults: new {controller = "Site"

在我的MVC4项目中,我有一个SiteController类,“Site”url工作正常,但我需要在“Site”之后有一个动态url部分,我需要url如下所示:

routes.MapRoute(
            name: "Default", // Route name
            url:"Site/{dynamicstring}", // URL with parameters
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );
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();
    }
mysite.com/Site/{DYNAMICSTRING}/Users(或其他)

{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();
    }
    public class HomeController:Controller
    {
        public ActionResult Subdomain(string dynamicString)
        {
            return View();
        }
    }

当我导航到:/Site/Subdomain/SomeString时,dynamicString的值为null。您必须配置路由。例如,如果您有Homecontroller:

    public ActionResult Subdomain(string dynamicString)
    {
        return View();
    }
    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
        );
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部分添加部分

 url:"Site/{dynamicstring}/{anythingelse}" //  url:"Site/{dynamicstring}/{anythingelse}/{bla}/Test/{hello}/etc..."
或者你也可以有一条通吃路线,如下所示:

并通过在上拆分控制器索引操作中的所有其他部分来获取它们/

确保将自定义路由置于默认路由之前,否则默认路由将拾取它

在控制器中,您可以看到如下内容:

routes.MapRoute(
            name: "Default", // Route name
            url:"Site/{dynamicstring}", // URL with parameters
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );
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:

routes.MapRoute(
            name: "Default", // Route name
            url:"Site/{dynamicstring}", // URL with parameters
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );
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();
    }

您的dynamicstring的值为“test.nl”,而您的anythingelse的值为“jordy”
我希望这会有所帮助

我想他不想在其中包含动作部分。很好,但是我如何在我的控制器中检索“dynamicString”呢?这就是我正在做的,但是在公共ActionResult子域(string dynamicString)中,动态字符串为null,@JordyvanEijk是正确的,我真的不需要{action}partThen hardoce您的控制器和操作路由.MapRoute(名称:“默认”,url:“Home/Index/dynamicString”,默认值:new{controller=“Home”,action=“Index”,dynamicString=UrlParameter.Optional});谢谢,但它仍然没有解释如何在代码中检索dynamicString的值