Jak mogę szybko ustalić, jaki jest główny adres URL mojej aplikacji ASP.NET MVC? To znaczy, jeśli IIS jest skonfigurowany do obsługi mojej aplikacji pod adresem http://example.com/foo/bar , to chciałbym móc uzyskać ten adres URL w niezawodny sposób, który nie wymaga pobierania bieżącego adresu URL z prośbę i posiekaj ją w delikatny sposób, który zepsuje się, jeśli zmienię trasę.
Powodem, dla którego potrzebuję podstawowego adresu URL, jest to, że ta aplikacja internetowa wywołuje inną, która potrzebuje katalogu głównego do aplikacji internetowej dzwoniącego do celów wywołania zwrotnego.
.net
asp.net
asp.net-mvc
iis
Benjamin Pollack
źródło
źródło
urlHelper.Content("~")
? Jak utworzyć zdefiniowaćurlHelper
? Dzięki!var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
ControllerContext.RequestContext.HttpContext.Request
@Url.Content("~")
rozwiązuje na"/"
, który nie jest podstawowym adresem URL.Więc żaden z wymienionych tutaj nie działał dla mnie, ale korzystając z kilku odpowiedzi, dostałem coś działającego:
Aktualizacja dla ASP.NET Core / MVC 6:
ASP.NET Core
sprawia, że ten proces jest nieco bardziej bolesny, szczególnie jeśli jesteś głęboko w kodzie. Masz 2 opcje, aby uzyskać dostęp doHttpContext
1) Przekaż go ze swojego
controller
:następnie w
model
:2) Być może najprostszym sposobem jest wstrzyknięcie go do twojej klasy, co zaczyna się od zarejestrowania typów w twoim
Startup:
następnie wstrzyknij to dla ciebie w ten sposób:
w obu przypadkach zaktualizowano dla
.NET Core
GetBaseUrl()
:źródło
Helpers
w bazie mojej aplikacji, mamstatic
klasę o nazwieStatics
i umieszczam tam funkcje takie jak wyżej ... tylko upewnij się, że zmieniłeś powyższe zpublic string GetBaseUrl()
napublic static string GetBaseUrl()
Statics
, zamiast tego podzieliłem ją na bardziej konkretne zastosowania, więc w tym przypadku trafiłoby to do mojejUrlHelper
klasyW kodzie:
Składnia Razor MVC3:
źródło
/
zamiast rzeczywistej nazwy.Url
pomocnik jest dostępny od samego początku? Może tylko wController
. Na pewno nie wViewModel
żadnym innymclass
miejscu, w którym możesz tego potrzebować.Może jest to rozszerzenie lub modyfikacja zamieszczonych tutaj odpowiedzi, ale używam po prostu następującego wiersza i działa:
Kiedy moja ścieżka to:
http://host/iis_foldername/controller/action
wtedy otrzymuję:
http://host/iis_foldername/
źródło
Poniższy fragment kodu działa dobrze w MVC4 i nie wymaga
HttpContext
dostępnego:źródło
jQuery.load()
do konstruowania adresu URL kontrolera i działania, które chcę wywołać:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
Sztuka polegania na IIS polega na tym, że powiązania IIS mogą różnić się od twoich publicznych adresów URL (WCF patrzę na ciebie), szczególnie w przypadku maszyn produkcyjnych z wieloma bazami. Skłaniam się do użycia konfiguracji w celu jawnego zdefiniowania „podstawowego” adresu URL do celów zewnętrznych, ponieważ jest to zwykle bardziej skuteczne niż wyodrębnienie go z obiektu Request.
źródło
Użyj bezwzględnego podstawowego adresu URL. Działa zarówno z HTTP, jak i HTTPS.
źródło
To jest konwersja właściwości asp.net do MVC . Prawie wszystko polega na śpiewaniu i tańczeniu metodą root root.
Zadeklaruj klasę pomocnika:
Stosowanie:
Aby użyć z kontrolera:
Aby użyć w widoku:
źródło
W MVC _Layout.cshtml:
Tego używamy!
źródło
<base>
. Możesz także pominąć Schemat tak, aby działał z http lub https. Oznacza to, że możesz zacząć od adresu URL//
.Działa to dla mnie dobrze (także w przypadku modułu równoważenia obciążenia):
Zwłaszcza jeśli używasz niestandardowych numerów portów, użycie Request.Url.Authority na początku wydaje się być dobrym tropem, ale kończy się niepowodzeniem w środowisku LB.
źródło
Możesz mieć metodę statyczną, która sprawdza HttpContext.Current i decyduje, którego adresu URL użyć (serwer programistyczny lub serwer na żywo) w zależności od identyfikatora hosta. HttpContext może nawet oferować łatwiejszy sposób na zrobienie tego, ale jest to pierwsza opcja, którą znalazłem i działa dobrze.
źródło
Możesz użyć następującego skryptu w widoku:
źródło
W przypadku ASP.NET MVC 4 jest nieco inaczej:
źródło
Działa to w ASP .NET MVC 4 W każdej akcji kontrolera, którą możesz napisać: 1stline pobiera cały adres URL + ciąg zapytania. Druga linia usuwa lokalną ścieżkę i zapytanie, ostatni symbol „/”. W trzecim wierszu dodaj symbol „/” na ostatniej pozycji.
źródło
w prostym HTML i ASP.NET lub ASP.NET MVC, jeśli używasz znacznika:
źródło
W przypadku adresu URL z aliasem aplikacji, takim jak http://example.com/appAlias/ ... Możesz spróbować:
źródło
Na samej stronie:
W javascript:
Działa to w moim projekcie MVC, mam nadzieję, że to pomoże
źródło
Umieszczam to w głowie mojego _Layout.cshtml
źródło
Może to lepsze rozwiązanie.
za pomocą
źródło
W przypadku MVC 4:
źródło
Poniższe działało dla mnie solidnie
źródło
--output http: // localhost: 49626 / TEST /
źródło
To było moje rozwiązanie (przy użyciu .net core 3.1, w kontrolerze API):
źródło
Wystarczy w jednej linii uzyskać BaseUrl
źródło
Możesz także tego użyć. W przypadku stron maszynki do golenia lepiej go używać niż innych.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
źródło
dodaj tę funkcję do klasy statycznej w projekcie, takiej jak klasa narzędziowa:
zawartość utility.cs :
użyj tego kodu w dowolnym miejscu i ciesz się nim:
źródło