我的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答案 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();
}
如果你然后传入这样的网址:
你的dynamicstring将具有值“test.nl”并且你的anythingelse将具有“jordy” 我希望这有帮助