Estoy intentando validar una solicitud HTTP recibida por un servicio. Quiero comprobar si todos los encabezados necesarios están presentes, etc. De lo contrario, me gustaría lanzar una excepción, que, en algún lugar, establecería un código de respuesta y una línea de estado de la respuesta adecuada. No deseo redirigir al usuario a ninguna página de error específica, solo envíe la respuesta.¿Cuál es la forma correcta de validar solicitudes HTTP y devolver respuestas HTTP específicas en Global.asax?
Me pregunto dónde debería poner el código? Mi primera conjetura fue validar las solicitudes en Application_BeginRequest
, lanzar una excepción por error y manejarlo en Application_Error
.
Por ejemplo:
public void Application_BeginRequest(object sender, EventArgs e)
{
if(!getValidator.Validate(HttpContext.Current.Request))
{
throw new HttpException(486, "Something dark is coming");
}
}
public void Application_Error(object sender, EventArgs e)
{
HttpException ex = Server.GetLastError() as HttpException;
if (ex != null)
{
Context.Response.StatusCode = ex.ErrorCode;
Context.Response.Status = ex.Message;
}
}
Al parecer, en estos casos, Visual Studio se queja de una excepción no controlada en Application_BeginRequest
. Funciona, ya que el código dado se devuelve al cliente, pero creo que algo está mal con este enfoque.
[Editar]: He eliminado la segunda pregunta sobre la línea de estado personalizada, ya que estas preguntas no están realmente conectadas.
Gracias por la ayuda.
¿Dónde entra WCF aquí? ¿Está creando un servicio REST alojado en IIS? –
Bueno, sí. Creo que es una de las opciones, se opone a alojar un servicio como un servicio administrado de Windows/aplicación administrada (según msdn) –