2010-07-22 16 views
5

Ho un HttpHandler con il seguente codice:Impostazione Context.Response.StatusCode non sembra funzionare

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); 
      } 
     } 
    } 
} 

Purtroppo quando ho intenzionalmente specificare un'azione non valida, il browser visualizza solo una pagina vuota. Non dei messaggi di errore del browser vengono visualizzati sia in Firefox che in IE.

Cosa potrei fare di sbagliato?

MODIFICA - IE mostra il messaggio di errore, ma Firefox no.

+0

Che cosa ti dice la risposta di Firebug/Fiddler? – Oded

+0

Firebug mostra lo stato corretto. Questo significa che se voglio che il browser mostri un messaggio, devo renderlo da solo? –

risposta

8

Firebug mostra lo stato corretto. significa che se voglio che il browser visualizzi un messaggio, devo eseguire il rendering da solo? - deverop

Assolutamente sì. Ciò che il browser fa in base a un codice di errore ricevuto dipende dal browser. Ma puoi ancora fornire HTML per andare avanti con la 404. Caso in questione ... dai un'occhiata a Stack Overflow's 404 page. Quel messaggio di errore è interamente realizzato a mano.

In genere, tuttavia, si desidera limitare la quantità di dati restituiti da uno stato di errore; più dati vengono restituiti da una richiesta errata, maggiore è la superficie di attacco per negazione del servizio.

12

Prima Prova questo:

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

:) ~

3

Ho avuto un problema simile, che si verifica solo in IIS 7.0. Quello che potresti provare è impostare

Response.TrySkipIisCustomErrors = true; 
Problemi correlati