ASP.NET MVC маршрутизация - добавление ситенама? - PullRequest
0 голосов
/ 04 октября 2018

Итак, мне нужно, чтобы мой сайт передавал это в маршрутизации:

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

"sitename" похоже на 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.

Я просто хочу, чтобы возможность маршрутизации работала как обычно, но чтобы можно было извлекать часть "somesite" или "anothersite" вокруг контроллеров.

1 Ответ

0 голосов
/ 05 октября 2018

Сначала добавьте маршрут к 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();
   }
}

Надеюсь, это поможет.

...