【发布时间】:2010-09-18 01:49:26
【问题描述】:
如您所见,这是来自非 Web 开发人员的问题。我想要一个 ASPX 页面,在某些情况下,它可以从代码中生成 401 错误。理想情况下,它会显示 IIS 标准页面。
【问题讨论】:
标签: c# asp.net iis asp.net-2.0
如您所见,这是来自非 Web 开发人员的问题。我想要一个 ASPX 页面,在某些情况下,它可以从代码中生成 401 错误。理想情况下,它会显示 IIS 标准页面。
【问题讨论】:
标签: c# asp.net iis asp.net-2.0
【讨论】:
设置Response.StatusCode,然后——如果你需要停止执行——调用Response.End()。
【讨论】:
Response.StatusCode = 401;
Response.End();
【讨论】:
401,拦截它,将其重写为 302。因此,用户代理不是返回401,而是呈现302 Found。
我想我还是更喜欢:
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();
【讨论】: