2008-12-06 7 views
8

Jestem nowy w ASP.NET MVC i próbuję uzyskać pełny adres URL do działania podczas pracy w widoku. Potrzebuję tego, aby przesłać do interfejsu API innej firmy jako wywołania zwrotnego. Na przykład to, co jest mi potrzebneJaki jest preferowany sposób uzyskania pełnej ścieżki serwera w widoku ASP.NET MVC?

http://myserver.com/controller/action

Gdy używam

<%= Url.Action("action", "controller") %> 

uzyskać

/kontroler/działania

Wiem, na kilka sposobów, aby dodać ścieżkę bazową serwera do tego, ale zastanawiam się, jaki jest preferowany sposób to zrobić w widoku ASP.NET MVC?

EDYCJA: Aby wyjaśnić, nie jest to adres URL bieżącego widoku/akcji dla innej akcji w tym samym kontrolerze.

Odpowiedz

20

Aby złapać wariacje w protokole (http/https), rozróżnianie portów i ścieżki wirtualnej (nie zawsze można zakładać będziemy w głównym serwera) skończyło się następujące rozwiązanie:

<%= Request.Url.GetLeftPart(System.UriPartial.Authority) + Url.Action("action", "controller")%> 

Pracuję nad przeniesieniem tej metody do rozszerzenia, aby była ładniejsza.

3

Edytuj: dla dowolnego widoku/kontrolera, nie wiesz, czy znajdziesz coś prostszego.

http://<%=Request.Url.Host %><%=Url.Action("action", "controller")%> 
+0

'@ Url.Action ("Action", "Controller", null, "http")' byłaby bardziej zwięzły .. . –

2

Napisałem wpis na blogu dotyczący generowania pełnej ścieżki o nazwie How to build absolute action URLs using the UrlHelper class. Na pewno chcesz to sprawdzić!


Oto rozszerzenie Proponuję napisać:

/// <summary> 
/// Generates a fully qualified URL to an action method by using 
/// the specified action name, controller name and route values. 
/// </summary> 
/// <param name="url">The URL helper.</param> 
/// <param name="actionName">The name of the action method.</param> 
/// <param name="controllerName">The name of the controller.</param> 
/// <param name="routeValues">The route values.</param> 
/// <returns>The absolute URL.</returns> 
public static string AbsoluteAction(this UrlHelper url, 
    string actionName, string controllerName, object routeValues = null) 
{ 
    string scheme = url.RequestContext.HttpContext.Request.Url.Scheme; 

    return url.Action(actionName, controllerName, routeValues, scheme); 
} 
+0

Link do treści tutaj jest martwy. Zamiast zamieszczać linki do postów na blogu, publikuj właściwą odpowiedź. –

+0

@JohnBoker Przepraszamy, ostatnio złamałem zasady przekierowania. Odpowiednio zaktualizowałem swoją odpowiedź. –

0

Request.Url zwraca pełny adres URL w tym protokole (http: //), adres URL (www.mydomain.com/mypath) i zapytanie o znak zapytania (? id = 5).

@Request.Url  @*Razor tags*@ 

dla klasycznych tagów ASP.NET MVC byłoby

<%=Request.Url%> <%'Classic tags%> 
Powiązane problemy