web-dev-qa-db-ja.com

ASP.NET MVC-アクションへの完全なパスを取得する方法

ビューの内部で、アクションへの完全なルート情報を取得できますか?

コントローラMyControllerにDoThisというアクションがある場合。 "/MyController/DoThis/"のパスを取得できますか?

37
dev.e.loper

Urlヘルパーで Action メソッドを使用するようなものです:

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

かみそりで:

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

相対URL(/MyController/DoThis)。

また、絶対URL(http://localhost:8385/MyController/DoThis):

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

数日前に、まさにそのトピックについてブログ投稿を書きました( UrlHelperクラスを使用して絶対アクションURLを作成する方法 を参照)。 Darin Dimitrovが述べたように、protocolパラメータが明示的に指定されている場合、_UrlHelper.Action_は絶対URLを生成します。

ただし、読みやすくするために、カスタム拡張メソッドを作成することをお勧めします。

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

次に、このメソッドを次のように呼び出すことができます:@Url.AbsoluteAction("SomeAction", "SomeController")

9
Marius Schulz