2016-02-16 28 views
7
var test1 = HttpContext.Features.Get<IHttpConnectionFeature>(); 
var test2 = HttpContext.Connection.RemoteIpAddress; 

Khi chạy ứng dụng cục bộ trên IISExpress, hai dòng trở lại một cách chính xác giá trị 0:0:1.RemoteIpAddress luôn là null

Khi tôi xuất bản ứng dụng trên IIS 7.5 (đang chạy trên máy ảo). RemoteIpAddress luôn là null

Tôi đang sử dụng ASP.Net 5 RC 1.

Làm cách nào để có được địa chỉ IP của ứng dụng trong ứng dụng ASP.NET 5?

Tôi đã thử các giải pháp trong các câu hỏi sau, tuy nhiên tôi có vấn đề nêu trên:

+0

The X-Forwarded-For dường như được thiết lập theo mặc định trong RC1 U1 từ này [trả lời] (http : //stackoverflow.com/a/36316189/538763) – crokusek

Trả lời

7

Những gì bạn đang nhìn thấy là chính xác, nếu không hữu ích. Kết nối chấm dứt tại IIS, sau đó chuyển tiếp tới Kestrel, máy chủ web v.next, do đó các kết nối đến máy chủ web thực sự là từ localhost.

Những gì bạn cần làm là kích hoạt tính năng hỗ trợ cho X-Forwarded-For

  1. Thêm gói Microsoft.AspNet.HttpOverrides
  2. Trong phương pháp Configure() bạn thêm

    app.UseOverrideHeaders(new OverrideHeaderMiddlewareOptions 
        { 
         ForwardedOptions = ForwardedHeaders.XForwardedFor | 
              ForwardedHeaders.XForwardedProto 
        }); 
    

Lưu ý rằng điều này gói sẽ thay đổi trong RC2 để làm cho nó an toàn hơn để sử dụng.

+0

Vẫn nhận được giá trị rỗng. Rõ ràng đây là do lỗi: https://github.com/aspnet/IISIntegration/issues/17#issuecomment-184855218 –

+0

Ah darn. Chuyển sang IIS8? * grin * – blowdart

+6

Gói nuget bây giờ là ** Microsoft.AspNetCore.HttpOverrides ** và phương thức cấu hình là: ** app.UseForwardedHeaders (...) ** –

0

Trong dự án ASP.NET Core 2.0 bạn cần phải thêm gói Microsoft.AspNetCore.HttpOverrides và thêm mã này vào Configure phương pháp của bạn:

app.UseForwardedHeaders(new ForwardedHeadersOptions 
{ 
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto 
}); 
Các vấn đề liên quan