2010-07-22 95 views
5

我有一個HttpHandler用下面的代碼:設置Context.Response.StatusCode似乎不工作

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

不幸的是,當我特意指定了無效的動作,瀏覽器只顯示一個空白頁。瀏覽器錯誤消息的非顯示在Firefox和IE中。

我會做什麼錯?

編輯 - IE顯示錯誤消息,但Firefox不。

+0

螢火蟲/提琴手告訴你有關響應的是什麼? – Oded 2010-07-22 13:20:07

+0

Firebug顯示正確的狀態。這是否意味着如果我想讓瀏覽器顯示一條消息,我必須自己渲染它? – 2010-07-22 13:29:19

回答

8

螢火蟲顯示正確的狀態。 這是否意味着如果我想讓瀏覽器 顯示一條消息,我必須自己渲染 它? - deverop

絕對如此。瀏覽器根據收到的錯誤代碼所做的工作取決於瀏覽器。但是,您仍然可以提供HTML以配合404。例如,請看Stack Overflow's 404 page。該錯誤信息完全是手工製作的。

但是,通常需要限制從錯誤狀態返回的數據量;從錯誤請求中返回的數據越多,拒絕服務的攻擊面越大。

12

的第一次嘗試這樣的:

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

:)〜

3

我有一個類似的問題,只在IIS 7.0中發生。你也可以嘗試設置

Response.TrySkipIisCustomErrors = true;