我使用的是HttpListener
。但是,我只想處理來自本地的請求,而不是來自另一臺機器/服務器。如何確保使用HttpListener時http請求是本地的
如何以編程方式驗證傳入請求是否爲本地?我需要使用一些HttpListenerRequest
成員嗎?
我使用的是HttpListener
。但是,我只想處理來自本地的請求,而不是來自另一臺機器/服務器。如何確保使用HttpListener時http請求是本地的
如何以編程方式驗證傳入請求是否爲本地?我需要使用一些HttpListenerRequest
成員嗎?
如果請求的遠程地址等於127.0.0.1
,請使用RemoteEndPoint
property進行檢查。
HttpListenerRequest
有一個屬性IsLocal
它也應提供此信息。但是,它在我的電腦上返回false
。反映到源代碼,看來,這是因爲IsLocal
屬性使用代碼:
return this.LocalEndPoint.Address.Equals(this.RemoteEndPoint.Address);
:
return this.LocalEndPoint.Address == this.RemoteEndPoint.Address;
時,或許應該在(無法訪問)InternalIsLocal
屬性是使用代碼(對於我的情況,這個表達式返回true
)。使用這種方法可能更可取,以便您的代碼在轉換到IPv6時不依賴於IPv4地址。
僅基於您的文本,例如,當您通過外部IP地址訪問您自己的計算機時,似乎「IsLocal」返回true,例如, '192.168.1.130'。 – jpaugh 2015-11-24 20:39:53
實際上,我不確定'IsLocal'是否會返回true。由於'IpAddress'類不會重載'=='運算符,所以'IsLocal'屬性正在做引用相等性,這可能總是返回false,而不可訪問的'InternalIsLocal'做值相等性,在適當的時候應該返回true。我假設當通過外部IP地址訪問您的機器時,值相等版本將返回true。 – erdomke 2015-11-24 22:41:32
InternalIsLocal不可訪問,至少不適合我。所以我使用req.LocalEndPoint.Address.Equals(req.RemoteEndPoint.Address,其中req是我的HttpListenerRequest。 – 2018-02-03 23:32:51