web-dev-qa-db-fra.com

ASP.NET MVC - comment obtenir un chemin d'accès complet à une action

À l'intérieur d'une vue, puis-je obtenir des informations complètes sur l'itinéraire vers une action?

Si j'ai une action appelée DoThis dans un contrôleur MyController. Puis-je accéder à un chemin de "/MyController/DoThis/"?

37
dev.e.loper

Vous voulez dire comme utiliser la méthode Action sur l'assistant Url:

<%= Url.Action("DoThis", "MyController") %>

ou dans Razor:

@Url.Action("DoThis", "MyController")

qui vous donnera une URL relative (/MyController/DoThis).

Et si vous vouliez obtenir une URL absolue (http://localhost:8385/MyController/DoThis):

<%= Url.Action("DoThis", "MyController", null, Request.Url.Scheme, null) %>
81
Darin Dimitrov

Il y a quelques jours, j'ai écrit un article de blog sur ce sujet (voir Comment créer des URL d'action absolue en utilisant la classe UrlHelper ). Comme Darin Dimitrov l'a mentionné: UrlHelper.Action Générera des URL absolues si le paramètre protocol est spécifié explicitement.

Cependant, je suggère d'écrire une méthode d'extension personnalisée pour des raisons de lisibilité:

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

La méthode peut alors être appelée comme ceci: @Url.AbsoluteAction("SomeAction", "SomeController")

9
Marius Schulz