2010-12-07 5 views
1

Ich erstelle eine URL zur Laufzeit in einer ASP.NET MVC-Anwendung. Was ist der beste Weg, dies zu tun?IIS ApplicationName zur Laufzeit ASP.net

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

Die URL wird letztendlich verwendet, um einen AJAX-Aufruf an eine Controller-Aktion zurückzusetzen. Das Problem ist, dass diese Anwendung in meiner Implementierungsumgebung nicht der Stamm ist und daher die URL nicht gültig ist.

{host} \ url < - das ist was ich habe. {host} {Anwendungsname} \ url < - das ist was ich brauche.

Also ich wollte den Anwendungsnamen zur Laufzeit auflösen und verwenden Sie es zum Erstellen der URL. Wie kann ich nur den Anwendungsnamen erhalten? Ist das der beste Weg?

Danke!

Antwort

1

Sie sollten Request.ApplicationPath als ersten Teil Ihrer URL angeben.

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

Sie können auch einen Blick auf die VirtualPathUtility-Klasse werfen. Insbesondere

VirtualPathUtility.ToAbsolute() 
2

Der beste Weg ist es, die URL helper Action Methode zu verwenden:

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

Das ist offensichtlich bedeutet, dass Sie die richtige Route festgelegt haben (unter id, release, localization, label und sessionId Token):

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

Bemerkung: niemals string verketten und/oder st ring.Format beim Umgang mit URLs, wenn Sie keine Probleme mit URL-Codierungen haben möchten, usw.

Bemerkung 2: Eine Instanz des UrlHelper ist in jeder Controller-Aktion als Url-Eigenschaft des Controllers verfügbar, in jede Ansicht und in jedem Helfer.

Verwandte Themen