tutorial net mvc from current content asp .net asp.net asp.net-mvc iis

.net - net - url content c#



¿Cómo puedo obtener la URL base de mi aplicación web en ASP.NET MVC? (20)

Así que ninguno de los enumerados aquí funcionó para mí, pero al usar algunas de las respuestas, obtuve algo que funcionaba:

public string GetBaseUrl() { var request = HttpContext.Current.Request; var appUrl = HttpRuntime.AppDomainAppVirtualPath; if (appUrl != "/") appUrl = "/" + appUrl; var baseUrl = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, appUrl); return baseUrl; }

Actualización para ASP.NET Core / MVC 6:

ASP.NET Core hace que este proceso sea un poco más doloroso, especialmente si está metido en su código. Tienes 2 opciones para llegar al HttpContext

1) Pásalo desde tu controller :

var model = new MyClass(HttpContext);

luego en model :

private HttpContext currentContext; public MyClass(HttpContext currentContext) { this.currentContext = currentContext; }

2) Quizás la forma más limpia es inyectarlo en su clase, que comienza con el registro de los tipos en su Startup:

public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); services.AddTransient<MyClass, MyClass>(); services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); }

Entonces haz que te lo inyecten así:

private HttpContext currentContext; public MyClass(IHttpContextAccessor httpContextAccessor) { currentContext = httpContextAccessor.HttpContext; }

en cualquier caso, aquí está la actualización para .NET Core GetBaseUrl() :

public string GetBaseUrl() { var request = currentContext.Request; var host = request.Host.ToUriComponent(); var pathBase = request.PathBase.ToUriComponent(); return $"{request.Scheme}://{host}{pathBase}"; }

¿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 , me gustaría poder obtener esa URL de una manera confiable que no implique obtener la URL actual de la Solicítelo y recórtelo de alguna manera frágil que se rompa si reencamino 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 realizar devoluciones de llamada.


El siguiente fragmento de código funciona bien para mí en MVC4, y no necesita un HttpContext disponible:

System.Web.HttpRuntime.AppDomainAppVirtualPath


El truco de confiar en IIS es que los enlaces de IIS pueden ser diferentes de sus URL públicas (WCF, lo estoy viendo), especialmente con máquinas de producción multi-homed. Tiendo a utilizar la configuración para definir explícitamente la url "base" para fines externos, ya que tiende a ser un poco más exitoso que extraerla del objeto Request.


En MVC _Layout.cshtml:

<base href="@Request.GetBaseUrl()" />

Eso es lo que usamos!

public static class ExtensionMethods { public static string GetBaseUrl(this HttpRequestBase request) { if (request.Url == (Uri) null) return string.Empty; else return request.Url.Scheme + "://" + request.Url.Authority + VirtualPathUtility.ToAbsolute("~/"); } }


En codigo:

Url.Content("~/");

Sintaxis de Razor MVC3:

@Url.Content("~/")


En la propia página web:

<input type="hidden" id="basePath" value="@string.Format("{0}://{1}{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority, Url.Content("~"))" />

En el javascript:

function getReportFormGeneratorPath() { var formPath = $(''#reportForm'').attr(''action''); var newPath = $("#basePath").val() + formPath; return newPath; }

Esto funciona para mi proyecto MVC, espero que ayude


Esto está funcionando en ASP .NET MVC 4 En cualquier acción del controlador que pueda escribir: 1stline obtiene toda la url + cadena de consulta. 2ª línea eliminar ruta local y consulta, último símbolo ''/''. 3ra línea agrega el símbolo ''/'' en la última posición.

Uri url = System.Web.HttpContext.Current.Request.Url; string UrlLink = url.OriginalString.Replace(url.PathAndQuery,""); UrlLink = String.Concat(UrlLink,"/" );


Esto funciona bien para mí (también con un equilibrador de carga):

@{ var urlHelper = new UrlHelper(Html.ViewContext.RequestContext); var baseurl = urlHelper.Content(“~”); } <script> var base_url = "@baseurl"; </script>

Especialmente si está utilizando números de puerto no estándar, el uso de Request.Url.Authority aparece como un buen candidato al principio, pero falla en un entorno LB.


Para ASP.NET MVC 4 es un poco diferente:

string url = HttpContext.Request.Url.AbsoluteUri;


Para MVC 4:

String.Format("{0}://{1}{2}", Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);


Para una URL base absoluta usa esto. Funciona tanto con HTTP como con HTTPS.

new Uri(Request.Url, Url.Content("~"))


Para url con alias de aplicación como http://example.com/appAlias/ ... Puede probar esto:

var req = HttpContext.Current.Request; string baseUrl = string.Format("{0}://{1}/{2}", req.Url.Scheme, req.Url.Authority, req.ApplicationPath);


Podría tener un método estático que analice HttpContext.Current y decida qué URL usar (servidor de desarrollo o en vivo) dependiendo de 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.


Puede usar el siguiente script en la vista:

<script type="text/javascript"> var BASE_URL = ''<%= ResolveUrl("~/") %>''; </script>


Puse esto en la cabeza de mi _Layout.cshtml

<base href="~/" />


Suponiendo que tenga un objeto de solicitud disponible, puede utilizar:

string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));

Si no está disponible, puede acceder a él a través del contexto:

var request = HttpContext.Current.Request


Tal vez sea una extensión o modificación de las respuestas publicadas aquí, pero uso simplemente la siguiente línea y funciona:

Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~")

Cuando mi ruta es: http://host/iis_foldername/controller/action
entonces recibo: http://host/iis_foldername/


Tal vez sea una mejor solución.

@{ var baseUrl = @Request.Host("/"); }

utilizando

<a href="@baseUrl" class="link"Base URL</a>


en html simple y ASP.NET o ASP.NET MVC si está utilizando la etiqueta:

<a href="~/#about">About us</a>


Esta es una conversión de una propiedad asp.net a MVC . Es prácticamente todo el canto, todo el baile obtiene el método de la raíz de la raíz.

Declara una clase de ayuda:

namespace MyTestProject.Helpers { using System.Web; public static class PathHelper { public static string FullyQualifiedApplicationPath(HttpRequestBase httpRequestBase) { string appPath = string.Empty; if (httpRequestBase != null) { //Formatting the fully qualified website url/name appPath = string.Format("{0}://{1}{2}{3}", httpRequestBase.Url.Scheme, httpRequestBase.Url.Host, httpRequestBase.Url.Port == 80 ? string.Empty : ":" + httpRequestBase.Url.Port, httpRequestBase.ApplicationPath); } if (!appPath.EndsWith("/")) { appPath += "/"; } return appPath; } } }

Uso:

Para usar desde un controlador:

PathHelper.FullyQualifiedApplicationPath(ControllerContext.RequestContext.HttpContext.Request)

Para usar en una vista:

@using MyTestProject.Helpers PathHelper.FullyQualifiedApplicationPath(Request)