Request.Url什么时候可以为空?

Moh*_*min 38 resharper controller asp.net-mvc-3

在我使用的控制器代码中:Request.Url.<Something>.ReSharper建议Request.Url可以为null.

那么,什么时候可以Request.Url为null?我不是在谈论测试,我只对一个已经部署的应用程序感兴趣.

请注意,到目前为止,我还没有收到任何NullReferenceException使用的信息Request.Url.

kar*_*una 46

HttpRequestBase是一个类,ReSharper将其视为一个实际的类,仅此而已(从理论上讲,它可以null).所以它不分析这个特定类的用法.

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

  • 好的喊叫,我认为有时候resharper可能是一件危险的事情,但如果没有它,我也许不会读到这个.干杯伙计们.PS拥抱和亲吻resharper :) (4认同)

小智 15

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

替代方法:使用HttpContext.Current.Request或检查是否Request为null.

  • System.Web.HttpContext.Current.Request :) (3认同)
  • 仅供参考:如果您的基本控制器继承自Controller,即BaseController:Controller,则Request.Url不为null (2认同)
  • 请注意,使用“System.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) (2认同)