所以,我需要我的网站在路由中传递它:
blah.com/sitename/{控制器}/{操作}/{id}
"站点名称"就像Vdir,但不完全是。它将帮助我获得正确的数据等...对于给定的站点名称。
最好的方法是什么?我尝试在路由中执行此操作,但没有去,因为它找不到页面(这是我尝试直接进入登录页面时(:
routes.MapRoute(
name: "Default",
url: "{sitename}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
用户将获得一个 URL blah.com/somesite 或 blah.com/anothersite。
我只希望路由能够正常工作,但能够提取控制器周围的"某个站点"或"另一个站点"部分。
首先添加一个路由到Global.aspx.cs
以传递{sitename}
参数:
routes.MapRoute(
"Sites", // Route name
"{sitename}/{controller}/{action}/{id}", // URL with parameters
new { sitename = "", controller = "Home", action = "Index", id = "" }// Parameter defaults
);
创建一个名为BaseController
的新控制器。然后在基本控制器中添加以下简单代码:
public class BaseController: Controller
{
public string SiteName = "";
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
SiteName = filterContext.RouteData.Values["sitename"] as string;
base.OnActionExecuting(filterContext);
}
}
并在派生控制器中使用:
public class HomeController: BaseController
{
public ActionResult Index()
{
ViewData["SiteName"] = SiteName;
return View();
}
}
希望这有帮助。