c# Obtención de la URL completa de la acción en ASP.NET MVC





3 Answers

Como mencionó Paddy: si usa una sobrecarga de UrlHelper.Action() que especifica explícitamente el protocolo a usar, la URL generada será absoluta y completamente calificada en lugar de ser relativa.

Escribí una publicación de blog llamada Cómo crear URL de acción absolutas utilizando la clase UrlHelper en la que sugiero escribir un método de extensión personalizado por motivos de legibilidad:

/// <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);
}

Entonces puedes simplemente usarlo así en tu vista:

@Url.AbsoluteAction("Action", "Controller")
c# .net asp.net-mvc url-routing

Esta pregunta ya tiene una respuesta aquí:

¿Existe una forma integrada de obtener la URL completa de una acción?

Estoy buscando algo como GetFullUrl("Action", "Controller") que devolvería algo como http://www.fred.com/Controller/Action .

El motivo por el que busco esto es evitar las URL de codificación en los correos electrónicos automáticos que se generan para que las URL siempre se puedan generar en relación con la ubicación actual del sitio.




Esto es lo que necesitas hacer.

@Url.Action(action,controller, null, Request.Url.Scheme)



Esta pregunta es específica de ASP .NET; sin embargo, estoy seguro de que algunos de ustedes se beneficiarán del sistema javascript que es beneficioso en muchas situaciones.

ACTUALIZACIÓN: La forma de obtener la url formada fuera de la página en sí está bien descrita en las respuestas anteriores.

O podrías hacer un oneliner como el siguiente:

new UrlHelper(actionExecutingContext.RequestContext).Action(
    "SessionTimeout", "Home", 
    new {area = string.Empty}, 
    actionExecutingContext.Request.Url!= null? 
    actionExecutingContext.Request.Url.Scheme : "http"
);

del filtro o

new UrlHelper(this.Request.RequestContext).Action(
    "Details", 
    "Journey", 
    new { area = productType }, 
    this.Request.Url!= null? this.Request.Url.Scheme : "http"
);

Sin embargo, muy a menudo, uno necesita obtener la URL de la página actual, para los casos en los que se usa Html.Action y se pone incómodo el nombre y el controlador de la página en la que estás. Mi preferencia en tales casos es usar JavaScript en su lugar. Esto es especialmente bueno en sistemas que están medio reescritos MVT medio web-formas medio vb-script medio Dios sabe qué y para obtener la URL de la página actual se necesita usar un método diferente cada vez.

Una forma es usar JavaScript para obtener la URL es window.location.href another - document.URL




Related