36

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

4

5 回答 5

59
Response.StatusCode = 401;
Response.End();
于 2008-10-20T07:00:10.253 回答
58

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

于 2008-10-20T07:00:07.803 回答
44

我想我还是更喜欢:

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方法。

于 2009-10-26T22:39:45.877 回答
12

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

Throw New HttpException(401, "Auth Failed")

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

于 2008-10-20T06:58:46.307 回答
10

补充一条评论。

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

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

Response.ClearContent();
Response.StatusCode = 401;
Response.End();
于 2011-10-05T21:24:21.757 回答