2010-12-07 9 views
1

Я создаю URL-адрес во время выполнения в приложении ASP.NET MVC. Каков наилучший способ сделать это?IIS ApplicationName во время выполнения ASP.net

url = string.Format("/controller/action/{0}/{1}/{2}/{3}/{4}", request.Id, 
              builds.Release, builds.Localization.Value, builds.Label, SessionId); 

URL-адрес в конечном счете используется для вызова AJAX обратно к действию контроллера. Проблема в том, что в моей среде развертывания это приложение не является корневым, поэтому URL-адрес недействителен.

{host} \ url < - это то, что у меня есть. {host} {applicationname} \ url < - это то, что мне нужно.

Так что я собирался разрешить имя приложения во время выполнения и использовать его для создания URL-адреса. Как я могу получить только имя приложения? Это лучший способ?

Спасибо!

ответ

1

Вы должны включить Request.ApplicationPath в качестве любимой части вашего URL-адреса.

url = string.Format("{0}controller/action/{1}/{2}/{3}/{4}/{5}", Request.ApplicationPath, request.Id, 
              builds.Release, builds.Localization.Value, builds.Label, SessionId); 

Вы также можете ознакомиться с классом VirtualPathUtility. В частности

VirtualPathUtility.ToAbsolute() 
2

Лучший способ заключается в использовании URL helper Action метод:

Url.Action("SomeAction", "SomeController", new { 
    id = request.Id, 
    release = builds.Release, 
    localization = builds.Localization.Value, 
    label = builds.Label, 
    sessionId = SessionId 
}); 

Это, очевидно, означает, что у вас есть правильный набор маршрутов (с id, release, localization, label и sessionId лексем):

routes.MapRoute(
    "MyRoute", 
    "{controller}/{action}/{id}/{release}/{localization}/{label}/{sessionId}", 
    new { controller = "SomeController", action = "SomeAction" } 
); 

Примечание: никогда не используйте конкатенации строк и/или st ring.Format при работе с URL-адресами, если вы не хотите иметь проблемы с кодировками URL и т. д.

Примечание 2: экземпляр UrlHelper доступен в каждом действии контроллера как свойство Url контроллера, в каждого вида и каждого помощника.

Смежные вопросы