7

次のコードを含む 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 の両方で表示されません。

私は何が間違っているのでしょうか?

編集- IE ではエラー メッセージが表示されますが、Firefox では表示されません。

4

4 に答える 4

14

最初にこれを試してください:

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

:)~

于 2010-07-22T14:27:13.080 に答える
8

Firebug は正しいステータスを示します。これは、ブラウザにメッセージを表示させたい場合、自分でレンダリングする必要があるということですか? – 発展する

絶対にそうです。受信したエラー コードに基づいてブラウザが何を行うかは、ブラウザ次第です。ただし、404 に合わせて HTML を提供することはできます。その例として、Stack Overflow の 404 ページをご覧ください。このエラー メッセージは完全に手作りです。

ただし、通常は、エラー ステータスから返されるデータの量を制限する必要があります。誤ったリクエストから返されるデータが多いほど、サービス拒否の攻撃対象領域が大きくなります。

于 2010-07-22T14:29:29.867 に答える
3

IIS 7.0 でのみ発生する同様の問題がありました。あなたも試すことができるのは、設定することです

Response.TrySkipIisCustomErrors = true;
于 2014-02-17T10:20:34.233 に答える
0

301 リダイレクトにはResponse.RedirectPermanent().

302 リダイレクトの場合Response.Redirect()

        if (isPermanentRedirect)
        {
            // 301 Redirect
            args.HttpContext.Response.RedirectPermanent(targetUrl);
        }
        else
        {
            // 302 Redirect
            args.HttpContext.Response.Redirect(targetUrl);
        }
于 2020-11-02T18:06:31.210 に答える