您可以看到,这是一个非 Web 开发人员的问题。我想要一个 ASPX 页面,在某些情况下,可以从代码生成 401 错误。理想情况下,它应该显示 IIS 的标准页面。
您可以看到,这是一个非 Web 开发人员的问题。我想要一个 ASPX 页面,在某些情况下,可以从代码生成 401 错误。理想情况下,它应该显示 IIS 的标准页面。
Response.StatusCode = 401;
Response.End();
我认为我仍然更喜欢:
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
方法。
补充一点。
如果页面的任何部分已经被写入输出缓冲区,则清除任何缓冲内容非常重要,否则页面可能不会正确显示。
在模板环境中,这种情况很有可能发生。例如主页面...
Response.ClearContent();
Response.StatusCode = 401;
Response.End();
401
,拦截它,并将其重写为302
。因此,用户代理程序呈现的不是401
,而是302 Found
。 - Ian Boyd