2011-02-05 53 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可以被模擬/存根。

+1

但是,如何得到異常時: `System.Web.HttpException:請求在此上下文中不可用' ? – 2015-04-30 07:48:38

17

您可以使用該控制器之外:

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

這的確在一次MVC5項目的伎倆。由於此代碼位於控制器中,因此可能安全地假設始終存在可行的上下文。 – 2016-06-15 22:41:13

1

在HTML幫助,您可以使用

htmlHelper.ViewContext.HttpContext.Request.Url