2012-08-27 3 views
32

Nel mio codice di controllo sto usando: Request.Url.<Something>. ReSharper suggerisce che Request.Url può essere nullo.Quando può Request.Url essere nullo?

Quindi, quando esattamente Request.Url è nullo? Non sto parlando di test, mi interessa solo un'applicazione che è in diretta/è già stata distribuita.

Si prega di notare che non ho ricevuto alcun NullReferenceException s utilizzando Request.Url fino a questo punto.

risposta

40

HttpRequestBase è una classe e ReSharper la vede come una classe reale, niente di più (in teoria, può essere null). Quindi non analizza l'utilizzo di questa classe specifica.

In realtà, penso che sarà Request.Urlmai essere null, quindi basta ignorare ReSharper in questo caso.

+4

Buon urlo, a volte penso che il resharper può essere una cosa pericolosa ma senza di esso forse non avrei letto questo. Ciao ragazzi. PS abbracci e baci per il resharper :) – Adam

13

In realtà un NullReferenceException può verificarsi quando si utilizza Request.Url. Quando crei la tua classe di controller di base da cui derivano altre classi, Request sarà nullo. Oppure, quando si utilizza ActionMailer con ASP.NET MVC, è necessario creare una classe controller che derivi da MailerBase (il che fa sì che Request all'interno di questo controller sia null).

Alternativa: utilizzare HttpContext.Current.Request o verificare se Request è nullo.

+3

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

+1

FYI: Request.Url non è nullo se il controller di base eredita da Controller, cioè BaseController: Controller –

+1

Basta essere consapevoli del fatto che si utilizza 'System. Web.HttpContext' può interferire con i test che hanno bisogno di schernire 'HttpContext' (poiché non vi è alcuna richiesta effettiva di IIS durante il test dell'unità). Vedere [HttpContextBase vs. HttpContext] (http://www.splinter.com.au/httpcontext-vs-httpcontextbase-vs-httpcontext/) e [Come ottenere l'oggetto HttpContextBase da HttpContext.Current] (http: // thecodersperspective. blogspot.com/2011/07/how-to-get-httpcontextbase-object-from.html) – ErikE