Можно ли получить контроллер и действие (НЕ ИМЯ !!) на основе URL? - PullRequest
1 голос
/ 01 июня 2011

Я нашел десятки потоков о получении имени контроллера и метода на основе URL, мне это тоже удалось.Могу ли я получить MethodInfo метода на основе их имени автоматически из механизма MVC, или я должен сделать Type.GetType("Namespace.Controllers."+cname+"Controller").GetMethod(mname)?Что не так приятно, так как откуда я знаю пространство имен в классе фреймворка?Как узнать, соблюдаются ли шаблоны именования по умолчанию, или же используется другая конфигурация?
Я хочу получить результат " Что будет выполнять MVC? " ...
Возможно ли это?

РЕДАКТИРОВАТЬ: дополнительная информация:
У меня есть фреймворк, в котором используются переводимые URL-адреса, управляемые данными, и имеется собственное изменение URL-адреса.Теперь он отлично работает, когда я хочу показать URL-адрес новостного объекта, я просто пишу @Url.Content("~/"+@Model.Link), и он отображает «SomeNewsCategory / SomeNews» вместо «News / 29» в URL, без необходимости изменять RouteTable.Маршруты динамически.Однако, в свою очередь, возникает проблема, когда я пытаюсь записать RedirectToAction("SomeStaticPage","Contact"); в контроллер.Для этого мне нужно зарегистрировать статическую ссылку в db, задать ей цель "/ SomeStaticPage / Contact", а затем написать Redirect("~/"+DB.Load(linkid).Link);, и это просто нехорошо, когда у меня 30 таких идентификаторов.Парень из команды веб-программистов начал регистрировать «фальшивые URL», которые выглядели так:

public class FakeURL
{
public string Controller;
public string Action;
public int LinkID;
}

, а затем он использовал их как Redirect(GetFakeUrl("controller","action"));, что и помогло, но все же было нехорошо.Это заставило меня задуматься: если я применяю атрибут [Link(linkid)] к каждому статически связанному методу, то переопределяет метод RedirectToAction в базовом контроллере , и когда он пишет ReturnToAction("action","controller"), я на самом деле посмотрюатрибут, загрузите URL и т. д. Но мне еще предстоит найти способ получить methodInfo, основанный на именах контроллера и действия или их URL.

EDIT : Я сам написал отражение, , единственное, чего не хватает, это получить сборку моего приложения из помощника бритвы , потому что CallingAssembly - это динамически скомпилированная сборка .cshtml., а не мое веб-приложение.Могу ли я как-нибудь это получить?

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

Я обнаружил, что это был совершенно неправильный подход. Я попытался найти тип контроллера на основе имени, когда вместо этого у меня был тип все время.

Так что вместо @Url.Action("SomeAction","SomeController") я буду использовать @Url.MyAction((SomeController c)=>c.SomeAction()), поэтому мне даже не придется искать контроллер.

0 голосов
/ 01 июня 2011

Чтобы ответить на ваши изменения, вы можете написать typeof(SomeType).Assembly, где SomeType - любой тип, определенный в коде в проекте (например, MvcApplication, или любая модель или контроллер)

Кроме того, вы можете написать ControllerContext.Controller.GetType() (или ViewContext), чтобы получить тип контроллера текущего запроса EDIT Это не то, что вы пытаетесь сделать.

...