2010-07-22 13 views
5

tengo un HttpHandler con el siguiente código:Context.Response.StatusCode preparación para el trabajo

using System; 
using System.Web; 
using Company.Cms; 
using Company.Web.Handlers.Console; 


namespace Company.Web.Handlers 
{ 
    /// <summary> 
    /// Summary description for AdminHandler 
    /// </summary> 
    public class AdminHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      HttpRequest request = context.Request; 
      HttpResponse response = context.Response; 
      string action = request.QueryString["action"]; 

      if (!HttpContext.Current.User.CanAdminister()) 
      { 
       response.StatusCode = 403; 
       response.Status = "403 Access Denied"; 
       response.End(); 
       return; 
      } 

      if (String.IsNullOrEmpty(action)) 
      { 
       response.StatusCode = 404; 
       response.Status = "404 Not Found"; 
       response.End(); 
       return; 
      } 

      IHttpHandler handler = null; 
      switch (action) 
      { 
       case "menu": 
        handler = new MenuHandler(); 
        break; 
       case "tree": 
        handler = new TreeHandler(); 
        break; 
       case "grid": 
        handler = new GridHandler(); 
        break; 
       case "list": 
        handler = new ListHandler(); 
        break; 
       case "drop": 
        handler = new DropHandler(); 
        break; 
       case "edit": 
        handler = new EditHandler(); 
        break; 
       case "new": 
        handler = new InsertHandler(); 
        break; 
      } 
      if (handler == null) 
      { 
       response.StatusCode = 404; 
       response.Status = "404 Not Found"; 
       response.End(); 
      } 
      else 
      { 
       handler.ProcessRequest(context); 
      } 
     } 
    } 
} 

Desafortunadamente cuando especifico intencionadamente una acción no válida, el navegador sólo muestra una página en blanco. No se muestran los mensajes de error del navegador tanto en Firefox como en IE.

¿Qué podría estar haciendo mal?

EDIT - IE muestra el mensaje de error, pero Firefox no lo hace.

+0

¿Qué le dice Firebug/Fiddler sobre la respuesta? – Oded

+0

Firebug muestra el estado correcto. ¿Esto significa que si quiero que el navegador muestre un mensaje, debo hacerlo yo mismo? –

Respuesta

8

Firebug muestra el estado correcto. ¿Significa que si quiero que el navegador muestre un mensaje, debo renderizarlo yo mismo? - deverop

Absolutamente lo hace. Lo que hace el navegador basado en un código de error recibido depende del navegador. Pero aún puede proporcionar HTML para que coincida con el 404. Caso en cuestión ... eche un vistazo al Stack Overflow's 404 page. Ese mensaje de error está completamente hecho a mano.

Normalmente, sin embargo, desea limitar la cantidad de datos devueltos desde un estado de error; Cuantos más datos devuelva de una solicitud errónea, mayor será la superficie de ataque por denegación de servicio.

12

Primera Prueba esto:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.StatusCode = 404; 
    Response.SuppressContent = true; 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 

:) ~

3

Tuve un problema similar, que solo se produce en IIS 7.0. Lo que también podría intentar es establecer

Response.TrySkipIisCustomErrors = true; 
Cuestiones relacionadas