Comment puis-je déterminer rapidement l'URL racine de mon application ASP.NET MVC? C'est-à-dire, si IIS est configuré pour servir mon application sur http://example.com/foo/bar , alors j'aimerais pouvoir obtenir cette URL de manière fiable, ce qui n'implique pas d'obtenir l'URL actuelle à partir du demander et le découper d'une manière fragile qui se brise si je réachemine mon action.
La raison pour laquelle j'ai besoin de l'URL de base est que cette application Web en appelle une autre qui a besoin de la racine de l'application Web de l'appelant à des fins de rappel.
.net
asp.net
asp.net-mvc
iis
Benjamin Pollack
la source
la source
urlHelper.Content("~")
? Comment créer définirurlHelper
? Merci!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("~")
se résout en"/"
, qui n'est pas l'URL de base.Donc, aucune de celles énumérées ici n'a fonctionné pour moi, mais en utilisant quelques-unes des réponses, j'ai obtenu que quelque chose fonctionne:
Mise à jour pour ASP.NET Core / MVC 6:
ASP.NET Core
rend ce processus un peu plus pénible, surtout si vous êtes au fond de votre code. Vous avez 2 options pour accéder auHttpContext
1) Remettez-le depuis votre
controller
:puis dans
model
:2) Peut-être que la façon la plus propre est de l'injecter dans votre classe, ce qui commence par enregistrer les types dans votre
Startup:
puis faites-le injecter pour vous comme ceci:
dans les deux cas, voici la mise à jour pour
.NET Core
GetBaseUrl()
:la source
Helpers
dans la base de mon application, j'ai unestatic
classe appeléeStatics
et je mets des fonctions comme ci - dessus là ... juste être sûr de vous faire changer ci - dessus à partirpublic string GetBaseUrl()
depublic static string GetBaseUrl()
Statics
, au lieu de cela, je l'ai divisée en utilisations plus spécifiques, donc dans ce cas, cela irait dans maUrlHelper
classeDans du code:
Syntaxe du rasoir MVC3:
la source
/
au lieu du nom réel.Url
aide de Code disponible dès le départ? Peut-être seulement dans leController
. Certainement pas dans leViewModel
ou tout autreclass
où vous pourriez avoir besoin de cela ..C'est peut-être une extension ou une modification des réponses publiées ici, mais j'utilise simplement la ligne suivante et cela fonctionne:
Quand mon chemin est:
http://host/iis_foldername/controller/action
alors je reçois:
http://host/iis_foldername/
la source
L'extrait suivant fonctionne bien pour moi dans MVC4 et n'a pas besoin d'un
HttpContext
disponible:la source
jQuery.load()
pour construire l'URL du contrôleur et l'action que je veux appeler:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
L'astuce pour s'appuyer sur IIS est que les liaisons IIS peuvent être différentes de vos URL publiques (WCF, je vous regarde), en particulier avec les machines de production multi-hébergées. J'ai tendance à utiliser la configuration pour définir explicitement l'url "de base" à des fins externes car cela a tendance à être un peu plus efficace que de l'extraire de l'objet Request.
la source
Pour une URL de base absolue, utilisez ceci. Fonctionne avec HTTP et HTTPS.
la source
Il s'agit d'une conversion d'une propriété asp.net en MVC . C'est une méthode à peu près tout en chantant et en dansant pour obtenir l'URL racine.
Déclarez une classe auxiliaire:
Usage:
Pour utiliser à partir d'un contrôleur:
Pour utiliser dans une vue:
la source
Dans MVC _Layout.cshtml:
C'est ce que nous utilisons!
la source
<base>
. Vous pouvez également omettre le schéma de sorte qu'il fonctionne avec http ou https. Cela signifie que vous pouvez démarrer l'URL avec//
.Cela fonctionne bien pour moi (également avec un équilibreur de charge):
Surtout si vous utilisez des numéros de port non standard, l'utilisation de Request.Url.Authority apparaît comme une bonne piste au début, mais échoue dans un environnement LB.
la source
Vous pouvez avoir une méthode statique qui examine HttpContext.Current et décide quelle URL utiliser (développement ou serveur en direct) en fonction de l'ID d'hôte. HttpContext pourrait même offrir un moyen plus facile de le faire, mais c'est la première option que j'ai trouvée et cela fonctionne bien.
la source
Vous pouvez utiliser le script suivant en vue:
la source
Pour ASP.NET MVC 4, c'est un peu différent:
la source
Cela fonctionne dans ASP .NET MVC 4 Dans n'importe quelle action de contrôleur, vous pouvez écrire: 1stline obtient l'url entière + la chaîne de requête. La deuxième ligne supprime le chemin d'accès local et la requête, dernier symbole '/'. 3ème ligne, ajoutez le symbole «/» à la dernière position.
la source
en html simple et ASP.NET ou ASP.NET MVC si vous utilisez la balise:
la source
Pour une URL avec un alias d'application comme http://example.com/appAlias/ ... Vous pouvez essayer ceci:
la source
Sur la page Web elle-même:
Dans le javascript:
Cela fonctionne pour mon projet MVC, j'espère que cela aide
la source
Je mets ça dans la tête de mon _Layout.cshtml
la source
C'est peut-être une meilleure solution.
en utilisant
la source
Pour MVC 4:
la source
Ce qui suit a fonctionné solidement pour moi
la source
--sortie http: // localhost: 49626 / TEST /
la source
C'était ma solution (en utilisant .net core 3.1, dans un contrôleur api):
la source
Obtenez simplement BaseUrl en une seule ligne
la source
Vous pouvez également l'utiliser. Pour les pages rasoir, il vaut mieux l'utiliser que les autres.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
la source
ajoutez cette fonction dans une classe statique dans un projet comme une classe utilitaire:
Contenu d' utilitaire.cs :
utilisez ce code n'importe où et profitez-en:
la source