2011-02-05 37 views
15

Làm cách nào để tải máy chủ lưu trữ mà không sử dụng Request? Mã này có thể được đặt trong bộ điều khiển:ASP.NET MVC nhận máy chủ hiện tại

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

nhưng tôi di chuyển nó ra khỏi bộ điều khiển và cần tìm cách khác để thay thế this.Request.Url.Host này.

toàn bộ mục đích của tôi là để được tiếp cận với phương pháp này trong một lớp helper:

Url.IsLocalUrl(returnUrl); 

phương pháp helper của tôi sẽ giống như thế này:

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

Trả lời

10

Hoặc sử dụng HttpContext.Current.Request hoặc tiêm một thể hiện HttpContextBase vào bất cứ điều gì nó cần thông tin này. Tôi muốn giới thiệu tùy chọn 2 bởi vì, bạn có thể dễ dàng kiểm tra thành phần khác này. Kể từ HttpContextBase có thể được chế giễu/stubbed.

+1

Nhưng, làm cách nào để có ngoại lệ: 'System.Web.HttpException: Yêu cầu không có sẵn trong ngữ cảnh này ' ? –

17

Bạn có thể sử dụng bên ngoài này của một bộ điều khiển:

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

này đã làm các trick trong một dự án MVC5. Vì mã này nằm trong một bộ điều khiển nên có lẽ nó sẽ an toàn để cho rằng sẽ luôn có một ngữ cảnh khả thi để kéo. –

1

Trong helper html bạn có thể sử dụng

htmlHelper.ViewContext.HttpContext.Request.Url 
Các vấn đề liên quan