2011-02-05 55 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