Alf*_*ono 5 .net c# http http-status-codes
我有一个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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我故意指定无效操作时,浏览器只显示一个空白页面.在Firefox和IE中都显示非浏览器错误消息.
我能做错什么?
编辑 - IE显示错误消息,但Firefox没有.
小智 13
首先尝试这个:
protected void Page_Load(object sender, EventArgs e)
{
Response.StatusCode = 404;
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
Run Code Online (Sandbox Code Playgroud)
:)〜
Firebug显示正确的状态.这是否意味着如果我希望浏览器显示消息,我必须自己渲染它? - deverop
绝对是这样的.浏览器根据收到的错误代码执行的操作取决于浏览器.但你仍然可以提供HTML以配合404.例如,请看看Stack Overflow的404页面.该错误消息完全是手工制作的.
但是,通常,您希望限制从错误状态返回的数据量; 您从错误请求返回的数据越多,拒绝服务的攻击面就越大.