C# MVC4动态控制器路径?
在我的MVC4项目中,我有一个SiteController类,“Site”url工作正常,但我需要在“Site”之后有一个动态url部分,我需要url如下所示: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"
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的值