我使用的是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