Я создаю модульное приложение ASP.NET MVC, используя области.Короче говоря, я создал жадный маршрут, который перехватывает все маршруты, начинающиеся с {application} / {* catchAll}.
Вот действие:
// get /application/index
public ActionResult Index(string application, object catchAll)
{
// forward to partial request to return partial view
ViewData["partialRequest"] = new PartialRequest(catchAll);
// this gets called in the view page and uses a partial request class to return a partial view
}
Пример:
URL-адрес "/ Application / Accounts / LogOn" затем заставит действие Index передать "/ Accounts / LogOn" в PartialRequest, но в виде строкового значения.
// partial request constructor
public PartialRequest(object routeValues)
{
RouteValueDictionary = new RouteValueDictionary(routeValues);
}
В этом случаеСловарь значений маршрута не будет возвращать никаких значений для routeData, тогда как если я укажу маршрут в действии индекса:
ViewData["partialRequest"] = new PartialRequest(new { controller = "accounts", action = "logon" });
Это работает, а значения routeData содержат ключ «controller» и «action»ключ;тогда как раньше ключи были пустыми, и, следовательно, остальная часть класса не будет работать.
Поэтому мой вопрос, как я могу преобразовать "/ Accounts / LogOn" в catchAll в "new {controller ="account ", action =" logon "}" ??
Если это не ясно, я объясню больше!:)
Matt
Это "самый близкий", который у меня есть, но он, очевидно, не будет работать для сложных маршрутов:
// split values into array
var routeParts = catchAll.ToString().Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
// feels like a hack
catchAll = new
{
controller = routeParts[0],
action = routeParts[1]
};