2012-08-27 16 views
32

En mi código de controlador estoy usando: Request.Url.<Something>. ReSharper sugiere que Request.Url puede ser nulo.¿Cuándo puede ser nulo Request.Url?

Entonces, cuando exactamente puede Request.Url ser nulo? No estoy hablando de pruebas, solo estoy interesado en una Aplicación que está activa/ya ha sido implementada.

Tenga en cuenta que no he recibido ninguna NullReferenceException desde el uso de Request.Url hasta este momento.

Respuesta

40

HttpRequestBase es una clase y ReSharper lo ve como una clase real, nada más (teóricamente, puede ser null). Por lo tanto, no analiza el uso de esta clase específica.

En realidad, creo que nunca se Request.Url se ser null, por lo que simplemente ignorar ReSharper en este caso.

+4

Buen grito, creo que a veces el resharper puede ser algo peligroso, pero sin él quizás no hubiera leído esto. Animo amigos. PS abrazos y besos para resharper :) – Adam

13

En realidad, se puede producir NullReferenceException al usar Request.Url. Cuando crea su propia clase de controlador base de la que derivan otras clases, Request será nulo. O al utilizar ActionMailer con ASP.NET MVC, deberá crear una clase de controlador que se deriva de MailerBase (que también hace que Request dentro de este controlador sea nulo).

Alternativa: use HttpContext.Current.Request o verifique si Request es nulo.

+3

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

+1

FYI: Request.Url no es nulo si tu controlador base hereda de Controller, es decir, BaseController: Controller –

+1

Solo ten en cuenta que al usar 'System. Web.HttpContext' puede interferir con las pruebas que necesitan simular el 'HttpContext' (ya que no hay una solicitud real de IIS durante la prueba unitaria). Consulte [HttpContextBase vs. HttpContext] (http://www.splinter.com.au/httpcontext-vs-httpcontextbase-vs-httpcontext/) y [Cómo obtener el objeto HttpContextBase de HttpContext.Current] (http: // thecodersperspective. blogspot.com/2011/07/how-to-get-httpcontextbase-object-from.html) – ErikE

Cuestiones relacionadas