2012-08-27 76 views
32

在我使用的控制器代码中:Request.Url.<Something>。 ReSharper建议Request.Url可以为空。什么时候可以Request.Url为空?

那么,何时Request.Url可以为空?我不是在说测试,我只关心已经部署的应用程序。

请注意,直到目前为止,我还没有收到任何从使用Request.Url

回答

40

HttpRequestBase是一个类,ReSharper将其视为一个实际类,没有更多(理论上它可以是null)。所以它不会分析这个特定类的用法。

在现实中,我认为Request.Url永远null,所以就忽略了在这种情况下,ReSharper的。

+4

好大喊,我想有时候resharper可能是一件危险的事情,但没有它我可能不会读这个。干杯。 PS拥抱和亲吻resharper :) – Adam

13

实际上NullReferenceException可以发生在使用Request.Url时。当您创建其他类从其派生的自己的基础控制器类时,Request将为空。或者在ASP.NET MVC中使用ActionMailer时,您必须创建一个派生自MailerBase的控制器类(这也会导致此控制器内的Request为空)。

可选:使用HttpContext.Current.Request或检查Request是否为空。

+3

System.Web.HttpContext.Current.Request :) – lsp

+1

供参考:如果您的基本控制器继承自控制器,Request.Url非空,即BaseController:控制器 –

+1

只要知道使用'系统。 Web.HttpContext'可能会干扰需要模拟'HttpContext'的测试(因为在单元测试期间没有发生实际的IIS请求)。请参阅[HttpContextBase与HttpContext](http://www.splinter.com.au/httpcontext-vs-httpcontextbase-vs-httpcontext/)和[如何从HttpContext.Current获取HttpContextBase对象](http:// thecodersperspective。 blogspot.com/2011/07/how-to-get-httpcontextbase-object-from.html) – ErikE

相关问题