2010-10-05 31 views
11

Tengo un conjunto de vistas que se muestran a usuarios específicos. Estas son vistas que he copiado de otras vistas en nuestra aplicación, y las modifiqué un poco.Asp MVC Enlace de acción url absoluta

En estas vistas estoy usando el enlace Html.Action, pero necesito que estos devuelvan una URL absoluta en lugar de la relativa. Sé que hay parámetros adicionales que se pueden usar para obtener este efecto, pero no creo que sea viable cambiar todos mis enlaces en todos mis puntos de vista.

Idealmente, me gustaría hacer un cambio en un lugar y hacer que todos mis enlaces se procesen según sea necesario. Seguramente debe haber algo que pueda establecer, o una función que pueda anular para lograr esto.

Respuesta

2

Puede crear un nuevo método de extensión llamado Html.AbsoluteAction. AbsoluteAction puede agregar los parámetros adicionales necesarios para que la URL sea absoluta, por lo que solo tiene que escribir ese código una vez, en su método de extensión personalizado.

+0

Por lo que yo sé que es la única manera de hacer esto. De cualquier manera, tendrá que actualizar todos sus enlaces para que funcione. No estoy seguro de la razón para tener enlaces absolutos en un Html.Action ... –

11

Escribí una publicación de blog llamada How to build absolute action URLs using the UrlHelper class en la que presento un método de extensión personalizado llamado AbsoluteAction. ¡Te animo a que lo revises!

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

ASP.NET MVC incluye una función de funcionalidad para la generación de direcciones URL absolutas, aunque no de una manera muy intuitiva.

Existen varias sobrecargas del método UrlHelper.Action() que le permiten pasar parámetros adicionales como los valores de ruta, el protocolo a usar y el nombre de host para la URL. Si está utilizando una sobrecarga que le permite especificar el parámetro , la URL generada será absoluta. Por lo tanto, el código siguiente se puede utilizar para generar una URL absoluta para el método de acción Acerca de la HomeController:

@Url.Action("About", "Home", null, "http") 
Cuestiones relacionadas