2011-02-05 19 views
15

Requestを使用せずにホストを取得するにはどうすればよいですか?このコードは、コントローラに配置することができます:ASP.NET MVC現在のホストを取得

return String.Equals(this.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase); 

が、私は、コントローラの外に移動すると、このthis.Request.Url.Hostを交換する別の方法を見つける必要があるんです。

Url.IsLocalUrl(returnUrl); 

マイヘルパーメソッドは次のようになります:

public static string GetLocalUrl(string url) 
{ 
    if(Url.IsLocalUrl()){ 
     return url; 
    } 
    else{ 
     return Action("Security", "Home"); 
    } 
} 

答えて

10

いずれHttpContext.Current.Requestを使用するか、のインスタンスを注入この情報を必要としているものは何にでも反映されます。私はオプション2をお勧めします。なぜなら、この他のコンポーネントを簡単にテストできるからです。 HttpContextBaseはmocked/stubされることができるので。 HTMLヘルパーで

+1

しかし、例外が発生するときの方法: 'System.Web.HttpException:このコンテキストでリクエストが利用できません ' ? –

17

あなたは、コントローラのこの外側を使用することができます

私の全体の目的は、ヘルパークラスで、このメソッドへのアクセス権を持っていることです。

System.Web.HttpContext.Current.Request.Url 
+0

を使用することができますこれは、MVC5プロジェクトでトリックをしました。このコードはコントローラ内にあるので、引き続き実行可能なコンテキストが常に存在すると想定するのはおそらく安全です。 –

1

あなたは

htmlHelper.ViewContext.HttpContext.Request.Url 
関連する問題