2010-07-22 93 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;