2012-08-27 9 views
32

私のコントローラコードでは、私はRequest.Url.<Something>を使用しています。 ReSharperは、Request.Urlはnullであることを示唆しています。Request.Urlはいつ可能ですか?

したがって、正確にRequest.Urlがnullの場合は?私はテストについて話しているわけではありません。私はライブアプリケーション/既にデプロイされているアプリケーションのみに興味があります。

ここまでRequest.Urlを使用してからNullReferenceExceptionが届かないことにご注意ください。

答えて

40

HttpRequestBaseはクラスであり、ReSharperはそれを実際のクラスと見なします(理論的には、nullとすることができます)。したがって、この特定のクラスの使用状況は分析されません。実際には

は、私はちょうどこの場合、ReSharperのを無視し、Request.Urlnullになることはありませんだと思います。

+4

私は時々resharperは危険なことができますが、それがなければこれを読んでいないと思っています。乾杯。 PSの抱擁とresharperのためのキス:) – Adam

13

実際にNullReferenceExceptionは、Request.Urlを使用すると発生する可能性があります。他のクラスが派生する独自の基本コントローラークラスを作成すると、Requestはnullになります。または、ASP.NET MVCでActionMailerを使用する場合は、MailerBase(コントローラ内のRequestもnullになる)から派生したコントローラクラスを作成する必要があります。

代替:HttpContext.Current.Requestを使用するか、Requestがヌルかどうかを確認してください。

+3

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

+1

FYI:Request.Urlは、あなたのベースコントローラがコントローラから継承する場合、つまりBaseController:Controller –

+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

関連する問題