Путь к контроллеру в ASP.NET-MVC - PullRequest
2 голосов
/ 21 апреля 2009

Как мне узнать путь к контроллеру? Например, я могу получить путь к HtmlHelper следующим образом:

    private static string GetVirtualPath(HtmlHelper htmlhelper)
    {
        string virtualPath = null;
        TemplateControl tc = htmlhelper.ViewDataContainer as TemplateControl;

        if (tc != null)
        {
            virtualPath = tc.AppRelativeVirtualPath;
        }

        return virtualPath;
    }

Ответы [ 4 ]

5 голосов
/ 21 апреля 2009

Редактировать: следующее даст путь к сборке с контроллером и имя типа класса с действием контроллера. Может быть, комбинация из них даст вам то, что вы ищете, Аарон?

string assemblyPath = Assembly.GetExecutingAssembly().CodeBase;
string typeName = this.GetType().FullName;

Они дают, например, что-то вроде

file:///C:/Projects/TestApp/TestApp.UI/bin/TestApp.UI.DLL
TestApp.UI.Controllers.TestController

При условии, что вы размещаете и называете контроллеры «стандартными» способами ASP.NET MVC, определенная комбинация вышеперечисленного может дать вам правильный полный путь к файлу C #:

C:/Projects/TestApp/TestApp.UI/Controllers/TestController.cs

или относительный путь:

Controllers/TestController.cs

Следующее даст маршрут к действию контроллера:

1) string path = Request.Url.AbsolutePath

2) string appPath = Request.ApplicationPath;
   string absPath = Request.Url.AbsolutePath;
   string path = appPath.Length <= 1 ? 
       absPath : absPath.Replace(appPath, "");

Пример запроса на действие Index у TestController (http://localhost:50027/Test/Index): Вышеуказанное возвращает

1) /Test/Index
2) /Test/Index

Для веб-сайта с базовым URL-адресом http://localhost:50027/blog, пример запроса для действия IndexController's Index (http://localhost:50027/blog/Test/Index): Вышеуказанное возвращает

1) /blog/Test/Index
2) /Test/Index
1 голос
/ 21 апреля 2009

Метод, который у вас есть, возвращает относительное имя файла aspx для View - это не совсем местоположение HtmlHelper.

Когда вы говорите, что хотите путь Контроллера, что вы на самом деле имеете в виду? Ваш контроллер - это класс, скомпилированный где-то в сборке. Вы хотите получить местоположение исходного файла .cs для контроллера? Или что-то другое?

0 голосов
/ 23 апреля 2009

Аарон, звучит так, будто ты пишешь квинну, хе, но я полагаю, это для какого-то леса модульного теста или чего-то еще? Может быть, вы действительно хотите использовать сценарий сборки для того, что вы делаете? Вы могли бы поместить некоторые команды на странице свойств проекта, которые будут выполнять некоторые процессы в каталоге вашего контроллера при сборке? Извините, если это совсем не то, что вы пытаетесь сделать.

0 голосов
/ 21 апреля 2009

вы можете получить имя контроллера, как это

Url.RequestContext.RouteData.Values["controller"]

после получения имени контроллера вы можете разрешить путь, используя метод

ResolveClientUrl("~/<ControllerName>") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...