3
我需要在用戶在ASP.NET MVC上運行的其餘API中發出請求時沒有端口的IP。它似乎對地址的方式是它們的組合:從C#中的IPv6安全的IP字符串中刪除端口
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
HttpContext.Current.Request.UserHostAddress;
這給我的IP字符串:端口
IPV4很簡單,但是從閱讀中,我希望IPV6會給我這樣的事情:
[1fff:0:a88:85a3::ac1f]:8001
IPAddress.Parse可以處理帶端口但不帶IPv4端口的IPv6,這很奇怪。
我可以檢查字符串,看看它是什麼樣的地址,但我覺得應該有更好的方法。
任何想法?
我不會以紀念這是重複我的臨時版本,但這個答案你可能會感興趣 - http://stackoverflow.com/a/12044845/3032289使用'Uri'也可能是一種選擇,雖然它不完全乾淨。 – Luaan
與我目前的版本類似的方法,真的希望有一個框架方式來做到這一點,如IPEndpoint.Parse。但看起來這將不得不做。 –
那麼,公平地說,包括在一個IP地址中的端口不是完全標準化的數據。這些應該是兩個獨立的字段,因爲IP終端沒有標準,與IP地址和端口不同。另外請注意,'X-Forwarded-For' *應該*包含所有的代理,包括原來的客戶端,用逗號分隔。當然,這不可靠。 'UserHostAddress'只會給你鏈中的最新地址,這往往是客戶端和服務器之間的最後一個路由器。如果你可以避免使用IP地址,那麼這樣做 - 這是不可靠和煩人的。 – Luaan