2010-07-22 3 views
5

을 작동하지 않습니다설정 Context.Response.StatusCode는 다음 코드로 내가 HttpHandler를이

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 모두에 표시됩니다.

내가 잘못 할 수 있습니까?

EDIT - IE는 오류 메시지를 표시하지만 Firefox는 그렇지 않습니다.

+0

방화범/피들러가 응답에 대해 무엇을 말합니까? – Oded

+0

방화 광이 올바른 상태를 표시합니다. 브라우저에 메시지를 표시하려면 직접 렌더링해야합니까? –

답변

8

방화범이 올바른 상태를 보여줍니다. 이 메시지를 표시하려면 브라우저 을 원한다면 직접 렌더링해야합니다. 나 자신? - deverop

물론 그렇습니다. 받은 오류 코드를 기반으로 브라우저가 수행하는 작업은 브라우저에 달려 있습니다. 그러나 404와 함께 가기 위해 HTML을 제공 할 수 있습니다. 사례 : 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; 
관련 문제