2010-04-09 63 views

回答

5

HttpListenerRequest有一个属性IsLocal它也应提供此信息。但是,它在我的电脑上返回false。反映到源代码,看来,这是因为IsLocal属性使用代码:

return this.LocalEndPoint.Address.Equals(this.RemoteEndPoint.Address); 

return this.LocalEndPoint.Address == this.RemoteEndPoint.Address; 

时,或许应该在(无法访问)InternalIsLocal属性是使用代码(对于我的情况,这个表达式返回true)。使用这种方法可能更可取,以便您的代码在转换到IPv6时不依赖于IPv4地址。

+0

仅基于您的文本,例如,当您通过外部IP地址访问您自己的计算机时,似乎“IsLocal”返回true,例如, '192.168.1.130'。 – jpaugh 2015-11-24 20:39:53

+2

实际上,我不确定'IsLocal'是否会返回true。由于'IpAddress'类不会重载'=='运算符,所以'IsLocal'属性正在做引用相等性,这可能总是返回false,而不可访问的'InternalIsLocal'做值相等性,在适当的时候应该返回true。我假设当通过外部IP地址访问您的机器时,值相等版本将返回true。 – erdomke 2015-11-24 22:41:32

+0

InternalIsLocal不可访问,至少不适合我。所以我使用req.LocalEndPoint.Address.Equals(req.RemoteEndPoint.Address,其中req是我的HttpListenerRequest。 – 2018-02-03 23:32:51