【问题标题】:How to throw HTTP errors?如何抛出 HTTP 错误?
【发布时间】:2010-08-03 10:06:46
【问题描述】:

我正在使用 Response.Redirect 将用户重定向到新页面,但我希望仅当查询字符串中有特定参数时才显示该页面。否则,我希望显示 HTTP 401 身份验证错误页面。可以这样做吗?如果是,如何?如果没有,为什么不呢?

【问题讨论】:

    标签: c# asp.net http response.redirect


    【解决方案1】:

    您可以从您的页面重定向到IHttpHandler,该IHttpHandler 将输出您的身份验证错误页面的内容并将HTTP 状态代码设置为401。

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Authentication error");
        context.Response.StatusCode = 401;
    }
    

    MSDN topic for IHttpHandler 作为一些链接可以帮助您了解什么是 HTTP 处理程序以及如何实现它。最重要的是:

    HTTP Handlers and HTTP Modules Overview

    Walkthrough: Creating a Synchronous HTTP Handler

    How to: Register HTTP Handlers

    【讨论】:

    • 你确定这有效吗?你检查过标题吗?编辑:看来你可能是对的:stackoverflow.com/questions/3288797/… 但这仍然是重定向。
    • @Codesleuth,确实,这将取决于重定向。还要感谢您的链接,我不知道 IIS7 的具体细节。
    • 如何在我的代码中使用这个 IHttpHandler?我应该输入什么上下文参数?抱歉,我是新手。
    • 不妨删除我不正确的答案,因为这有效。还有,谢谢!我将更改我的旧代码以使用它:)
    【解决方案2】:

    以下返回 401 状态码,您需要添加 HTML 以显示自己,具体取决于 IIS 的配置方式。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(Request.QueryString["RedirectParam"]))
                Response.StatusCode = 401; 
            else
                Response.Redirect("redirectpage.html");
        }
    

    【讨论】:

      【解决方案3】:

      我想我自己想出了答案,在 Joao 的帮助下和其他人提供的答案..

      我只需要这样写:

       if (Request.Params[param] != nul)
                  {
                     ...
                  }
                  else
                  {
                      Response.ContentType = "text/html";
                      Response.Write("Authentication error");
                      Response.StatusCode = 401;
                      Response.End();
                  }
      

      简单! :) 让我知道这是否有任何潜在问题!

      【讨论】:

      • 这与我一小时前所说的相同。很高兴你修好了:)
      • 是的,但我不想创建新的重定向页面,而且我不知道一小时前的响应。 :D
      猜你喜欢
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多