¿Cómo puedo determinar rápidamente cuál es la URL raíz para mi aplicación ASP.NET MVC? Es decir, si IIS está configurado para servir mi aplicación en http://example.com/foo/bar , entonces me gustaría poder obtener esa URL de manera confiable que no implique obtener la URL actual del solicitar y cortarlo de una manera frágil que se rompe si cambio la ruta de mi acción.
La razón por la que necesito la URL base es que esta aplicación web llama a otra que necesita la raíz de la aplicación web de la persona que llama para fines de devolución de llamada.
.net
asp.net
asp.net-mvc
iis
Benjamin Pollack
fuente
fuente
urlHelper.Content("~")
? ¿Cómo creo definirurlHelper
? ¡Gracias!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("~")
resuelve"/"
, que no es la url base.Así que ninguno de los enumerados aquí funcionó para mí, pero usando algunas de las respuestas, obtuve algo que funciona:
Actualización para ASP.NET Core / MVC 6:
ASP.NET Core
hace que este proceso sea un poco más doloroso, especialmente si eres profundo en tu código. Tienes 2 opciones para llegar alHttpContext
1) Pásalo desde tu
controller
:luego en
model
:2) Quizás la forma más limpia es inyectarlo en su clase, que comienza con el registro de los tipos en su
Startup:
entonces haz que te lo inyecten así:
en cualquier caso, aquí está la actualización para
.NET Core
GetBaseUrl()
:fuente
Helpers
en la base de mi aplicación, tengo unastatic
clase llamadaStatics
y pongo funciones como la anterior allí ... solo asegúrese de cambiar la anterior depublic string GetBaseUrl()
apublic static string GetBaseUrl()
Statics
, sino que la dividí en usos más específicos, por lo que en este caso esto entraría en miUrlHelper
claseEn codigo:
MVC3 Razor Sintaxis:
fuente
/
lugar del nombre real.Url
asistente disponible para usted de inmediato? Quizás solo en elController
. Ciertamente, no en elViewModel
o cualquier otro lugarclass
donde pueda necesitar esto ..Tal vez sea una extensión o modificación de las respuestas publicadas aquí, pero uso simplemente la siguiente línea y funciona:
Cuando mi camino es:
http://host/iis_foldername/controller/action
entonces recibo:
http://host/iis_foldername/
fuente
El siguiente fragmento me funciona muy bien en MVC4, y no necesita un
HttpContext
disponible:fuente
jQuery.load()
para construir la URL del controlador y la acción que quiero llamar:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
El truco para confiar en IIS es que los enlaces de IIS pueden ser diferentes de sus URL públicas (WCF lo estoy mirando a usted), especialmente con máquinas de producción multi-homed. Tiendo a vectorizar hacia el uso de la configuración para definir explícitamente la url "base" para fines externos, ya que tiende a ser un poco más exitosa que extraerla del objeto Request.
fuente
Para una URL base absoluta, use esto. Funciona con HTTP y HTTPS.
fuente
Esta es una conversión de una propiedad asp.net a MVC . Es un método de url de raíz que canta y baila.
Declarar una clase auxiliar:
Uso:
Para usar desde un controlador:
Para usar en una vista:
fuente
En MVC _Layout.cshtml:
¡Eso es lo que usamos!
fuente
<base>
. También puede omitir el Esquema para que funcione con http o https. Eso significa que puede comenzar la url con//
.Esto funciona bien para mí (también con un equilibrador de carga):
Especialmente si está utilizando números de puerto no estándar, el uso de Request.Url.Authority aparece como un buen lead al principio, pero falla en un entorno LB.
fuente
Podría tener un método estático que examine HttpContext.Current y decida qué URL usar (servidor de desarrollo o en vivo) según la ID del host. HttpContext podría incluso ofrecer una forma más fácil de hacerlo, pero esta es la primera opción que encontré y funciona bien.
fuente
Puede usar el siguiente script a la vista:
fuente
Para ASP.NET MVC 4 es un poco diferente:
fuente
Esto está funcionando en ASP .NET MVC 4. En cualquier acción del controlador puede escribir: 1stline obtiene toda la url + Cadena de consulta. La segunda línea elimina la ruta local y la consulta, el último símbolo '/'. La tercera línea agrega el símbolo '/' en la última posición.
fuente
en html simple y ASP.NET o ASP.NET MVC si está usando la etiqueta:
fuente
Para url con alias de aplicación como http://example.com/appAlias/ ... Puedes probar esto:
fuente
En la página web en sí:
En el javascript:
Esto funciona para mi proyecto MVC, espero que ayude
fuente
Puse esto en la cabeza de mi _Layout.cshtml
fuente
Quizás sea una mejor solución.
utilizando
fuente
Para MVC 4:
fuente
Lo siguiente funcionó sólidamente para mí
fuente
- salida http: // localhost: 49626 / TEST /
fuente
Esta fue mi solución (usando .net core 3.1, en un controlador api):
fuente
Simplemente en una línea obtenga BaseUrl
fuente
También puedes usar esto. Para las páginas de afeitar, es mejor usarlo que los demás.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
fuente
agregue esta función en clase estática en proyecto como clase de utilidad:
contenido de utility.cs :
usa este código en cualquier lugar y disfrútalo:
fuente