2014-11-25 30 views
15

Tương đương với Asp.Net 5 trong số HttpContext.Request.UserHostAddress cũ là gì?UserHostAddress trong Asp.net Core

Tôi đã thử this.ActionContext.HttpContext nhưng không thể tìm thấy thuộc tính UserHostAddress hoặc ServerVariables.

Cảm ơn

Trả lời

9

Điều này đã di chuyển kể từ khi câu trả lời gốc được đăng. Truy cập nó bây giờ thông qua

httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress 
+0

Điều này luôn luôn là 'null' đối với tôi. (Tôi triển khai trang web trên IIS trên máy ảo) –

11

HttpRequest.UserHostAddress cung cấp địa chỉ IP của ứng dụng khách từ xa. Trong ASP.NET Core 1.0, bạn phải sử dụng tính năng kết nối HTTP để nhận được như vậy. HttpContext có phương thức GetFeature<T> mà bạn có thể sử dụng để có được một tính năng cụ thể. Ví dụ, nếu bạn muốn lấy địa chỉ IP từ xa từ một phương thức hành động điều khiển, bạn có thể làm một cái gì đó như thế này.

var connectionFeature = Context 
      .GetFeature<Microsoft.AspNet.HttpFeature.IHttpConnectionFeature>(); 

if (connectionFeature != null) 
{ 
    string ip = connectionFeature.RemoteIpAddress.ToString(); 
} 
+0

Thank you very much làm việc này, tôi sẽ không bao giờ đến để này bản thân mình. Tôi có thể tìm tài liệu tham khảo ở đâu? Tôi cũng đang tìm kiếm HttpContext.Request.ServerVariables cũ ["X_FORWARDED_FOR"]; Bạn có biết cú pháp mới này là gì không? Cảm ơn! –

+2

Điều này dường như không hoạt động chính xác khi chạy trong IIS 8. Địa chỉ IP được trả về trong mã khác với kết quả đầu ra IIS trong nhật ký yêu cầu. Bất kỳ bản cập nhật này sẽ cho phép nó hoạt động đúng trong IIS? –

0

Đối aspnet rc1-Update1 tôi thấy IP (với cổng) trong X-Forwarded-For tiêu đề, mà là giá trị có thể được truy cập từ bộ điều khiển như HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault().

+0

Tiêu đề này thường chỉ xuất hiện nếu yêu cầu đi qua bộ cân bằng tải (hoặc một cái gì đó tương tự) để thêm địa chỉ gốc. –

1

Nếu bạn có quyền truy cập vào các HttpContext, bạn có thể lấy Local/Remote Ipaddress từ Connection tài sản như sau:

var remote = this.HttpContext.Connection.RemoteIpAddress; 
var local = this.HttpContext.Connection.LocalIpAddress; 
Các vấn đề liên quan