HttpRequestBase.UserHostAddress抛出错误

时间:2012-02-07 15:44:10

标签: asp.net iis-7 httprequest

我正在捕获访问我网站特定部分的用户的一些信息,我收到了一个奇怪的错误。我有一段代码执行以下操作。

string userIp = request.UserHostAddress; 

请求变量是HttpRequestBase。有时这工作得很好,我得到IP - 其他时候它抛出一个错误,我不知道如何防范。这是我的错误日志。

“值不在预期范围内。在System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode,IntPtr errorInfo)    在System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name)“

似乎我第一次去一个页面它运行得很好,如果我刷新就会抛出错误,或者快速转到另一个捕获相同变量的页面。

1 个答案:

答案 0 :(得分:10)

我的记录器遇到了这个问题。我正在使用依赖注入,因为我怀疑你是。

就我而言,我收到此错误是因为我没有将记录器绑定到请求范围。因此,它存在于请求和维护一些HttpContext属性之间,但在与IIS通信的属性上抛出异常。

由于我使用Ninject,这只是将InRequestScope()方法从Ninject.Web.Common命名空间添加到我的绑定中。

简而言之:当某些属性(已编组到IIS并且请求不再有效)被访问时,似乎会为HttpContext的过时实例抛出此异常

希望有所帮助!

P.S。 NLog比你写的任何记录器都要好。或者,如果您只想要例外,请放入ELMAH。