如何在ASP.NET页面中以编程方式生成401错误

Det*_*eln 34 c# asp.net iis asp.net-2.0

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

Mar*_*ade 57

Response.StatusCode = 401;
Response.End();
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么这会被拒绝 - 这与我的(已投票)答案几乎相同,仅仅是代码形式.当然,它没有*可能*有用的链接,但它仍然是一个非常好的答案...... (7认同)
  • 它可能被拒绝了,因为它是在@jon之后提交的,所以它看起来像是一个背驮式的答案(虽然它们都是同时写的).感谢upvotes :) (3认同)

Jon*_*eet 55

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


Bri*_*son 44

我想我还是喜欢:

throw new HttpException(401, "Auth Failed")
Run Code Online (Sandbox Code Playgroud)

我认为该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>
Run Code Online (Sandbox Code Playgroud)

抛出新异常肯定会触发自定义错误.

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

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


Mit*_*ers 12

根据MSDN,您应该能够使用以下内容.

Throw New HttpException(401, "Auth Failed")
Run Code Online (Sandbox Code Playgroud)

编辑看到其他响应后,设置状态代码会更合适.

  • 我试过这个,当我在浏览器中检查http响应时,我得到了500(内部服务器错误)而不是401(未经授权) (3认同)

Ant*_*yVO 10

另外一条评论.

如果页面的一部分已经写入输出缓冲区,则清除任何缓冲的内容或页面可能无法正确显示非常重要.

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

Response.ClearContent();
Response.StatusCode = 401;
Response.End();
Run Code Online (Sandbox Code Playgroud)