2012-06-15 43 views

Trả lời

5

Sự cố với HttpContext.Request.Current.UserHostAddressHttpContext.Request.Current không có giá trị nếu bạn đang tự lưu trữ.

Cách bạn nhận được nó trong phiên bản hiện tại của SignalR (các 'dev' chi nhánh như của 2012/12/14) là như vậy:

protected string GetIpAddress() 
{ 
    var env = Get<IDictionary<string, object>>(Context.Request.Items, "owin.environment"); 
    if (env == null) 
    { 
     return null; 
    } 
    var ipAddress = Get<string>(env, "server.RemoteIpAddress"); 
    return ipAddress; 
} 

private static T Get<T>(IDictionary<string, object> env, string key) 
{ 
    object value; 
    return env.TryGetValue(key, out value) ? (T)value : default(T); 
} 

Bạn sử dụng để có thể có được nó thông qua Context.ServerVariables :

protected string GetIpAddress() 
{ 
    var ipAddress = Context.ServerVariables["REMOTE_ADDR"]; 
    return ipAddress; 
} 

Điều đó đơn giản hơn nhiều, nhưng chúng đã xóa vì lý do tôi không hiểu rõ.

+0

Giả sử rằng không ai đang sử dụng nhánh dev (trừ khi được tuyên bố rõ ràng) vì nó đại diện cho một điểm trong thời gian sha có thể thay đổi bất cứ lúc nào giữa bây giờ là một bản phát hành. – davidfowl

+1

Đánh dấu đây là câu trả lời vì Owin hiện nay là một phần của ASP.NET SignalR. –

0

Theo source code không, không có tài sản như vậy trong HubCallerContext.

26

Với SignalR 2.0, Context.Request không còn Items nữa (ít nhất không phải những gì tôi thấy). Tôi đã tìm ra, nó hoạt động như thế nào bây giờ. (Bạn có thể giảm nếu/phần khác để một nhà điều hành ternary, nếu bạn như thế.)

protected string GetIpAddress() 
    { 
     string ipAddress; 
     object tempObject; 

     Context.Request.Environment.TryGetValue("server.RemoteIpAddress", out tempObject); 

     if (tempObject != null) 
     { 
      ipAddress = (string)tempObject; 
     } 
     else 
     { 
      ipAddress = ""; 
     } 

     return ipAddress; 
    } 
+6

Câu trả lời đầy đủ. Ở dạng đơn giản nhất, bạn có thể sử dụng 'Context.Request.Environment [" server.RemoteIpAddress "]' –

1

cách khác là

var serverVars = Context.Request.GetHttpContext().Request.ServerVariables; 
var Ip = serverVars["REMOTE_ADDR"]; 
Các vấn đề liên quan