【问题标题】:How to generate an 401 error programmatically in an ASP.NET page如何在 ASP.NET 页面中以编程方式生成 401 错误
【发布时间】:2010-09-18 01:49:26
【问题描述】:

如您所见,这是来自非 Web 开发人员的问题。我想要一个 ASPX 页面,在某些情况下,它可以从代码中生成 401 错误。理想情况下,它会显示 IIS 标准页面。

【问题讨论】:

    标签: c# asp.net iis asp.net-2.0


    【解决方案1】:

    根据MSDN,您应该可以只使用以下内容。

    Throw New HttpException(401, "Auth Failed")
    

    编辑在看到其他响应后设置状态码会更合适。

    【讨论】:

    • 我试过这个,当我在浏览器中检查 http 响应时,我得到了 500(内部服务器错误)而不是 401(未经授权)
    • 另外,在性能方面抛出异常不是更糟吗?
    • 我真的不在乎什么是首选。这种方法更短更容易记住,所以我使用它。
    【解决方案2】:

    设置Response.StatusCode,然后——如果你需要停止执行——调用Response.End()

    【讨论】:

      【解决方案3】:
      Response.StatusCode = 401;
      Response.End();
      

      【讨论】:

      • 我不知道为什么这被否决了 - 它与我的(投票赞成)答案几乎相同,只是代码形式。当然,它没有可能有用的链接,但它仍然是一个非常好的答案......
      • 我完全同意乔恩的观点。由于我不能接受两个答案,我接受了乔恩的答案并投了这个。虽然有一些事情我应该自己弄清楚,但它给了我一个良好的开端。谢谢!
      • 它可能被否决了,因为它是在@jon 之后提交的,所以它看起来像是一个附带的答案(尽管它们都是同时编写的)。感谢您的支持:)
      • 这个 Jon 的方法和这个方法的问题是,Forms 身份验证会看到有人试图返回 401,拦截它,将其重写为 302。因此,用户代理不是返回401,而是呈现302 Found
      【解决方案4】:

      我想我还是更喜欢:

      throw new HttpException(401, "Auth Failed")
      

      我认为Response.StatusCode 方法不会触发 web.config 文件中定义的自定义错误,例如

      <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
           <error statusCode="401" redirect="AuthFailed.htm" />
           <error statusCode="403" redirect="NoAccess.htm" />
           <error statusCode="404" redirect="FileNotFound.htm" />
      </customErrors>
      

      抛出一个新异常肯定会触发自定义错误。

      此外,您可能正在使用应用程序范围的错误记录工具,例如 ELMAH 或其他东西,我认为 Response.StatusCode 方法也不会记录在那里。

      注意:我现在看到的问题是,理想情况下,应该显示标准的 IIS 错误页面。显然,自定义错误页面是不想要的。在这种情况下,我会使用Response.StatusCode 方法。

      【讨论】:

      • 嘿,太棒了!正是我需要知道的!
      【解决方案5】:

      还有一条评论。

      如果页面的一部分已经被写入输出缓冲区,那么清除所有缓冲内容很重要,否则页面可能无法正确显示。

      这很可能在模板化环境中。例如母版页...

      Response.ClearContent();
      Response.StatusCode = 401;
      Response.End();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多