ASP.NET MVC路由-添加站点名称吗?

时间:2018-10-04 20:00:37

标签: asp.net-mvc asp.net-mvc-routing

因此,我需要让我的网站在路由中传递该消息:

blah.com/sitename/ {controller} / {action} / {id}

“站点名称”就像一个Vdir,但不完全相同。它将帮助我获取给定站点名称的正确数据等。

做到这一点的最佳方法是什么?我尝试在路由中执行此操作,但是没有走,因为它找不到页面(这是在我尝试直接登录到登录页面时):

Zip

将为用户提供blah.com/somesite或blah.com/anothersite等网址。

我只希望路由功能能够正常工作,但能够提取控制器周围的“某个站点”或“另一个站点”部分。

1 个答案:

答案 0 :(得分:1)

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

希望这会有所帮助。