微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在ASP.NET页面的代码隐藏类中响应IIS的标准404 Not Found页面

如何解决在ASP.NET页面的代码隐藏类中响应IIS的标准404 Not Found页面

| 我希望能够生成IIS的标准404响应,而不是自定义404页面,以响应代码隐藏类中的错误情况。我的
Page_Load
方法看起来像这样:
protected void Page_Load(object sender,System.EventArgs e)
{
    this.a = ...
    ...
    if (this.a == null) ... // *** generate a 404
}
因此,如果
a
不为null,则呈现
.aspx
文件,以此类推,但是如果
a
为null,我希望显示标准的“找不到资源”页面,并带有404响应代码。 如果我使用:
if (a == null) Response.StatusCode = 404;
(根据我所发现的,这似乎是正确的方法页面继续呈现(并在尝试使用
a
时给出
NullReferenceException
的响应码为500)。 如果我使用:
if (a == null) throw new HttpException(404,\"Not found\");
响应代码为404,但页面内容为ASP.NET未处理的异常页面显示HttpException(当
customErrors
On
时,将显示为通用\“ Runtime Error \”)。 我想显示IIS的404页面,因为用户会理解这一点,但是如果页面显示服务器错误,他们可能不会检查该页面的响应代码。 编辑:看来我不能完全做到这一点。给定@ Smudge202的答案,我让我的代码背后投掷
HttpException
,并将代码添加
Global.Application_Error()
以处理这些异常:
void Application_Error(object sender,EventArgs e)
{
var exception = Server.GetLastError();

    if (exception is HttpException)
    {
        var httpException = (HttpException)exception;
        if (httpException.GetHttpCode() == 404)
        {
            var context = HttpContext.Current;
            context.Response.Clear();
            context.Response.StatusCode = 404;
            context.Response.StatusDescription = \"Not Found\";
            context.Response.Write(\"<h1>404 Not Found</h1>\");
            context.Server.ClearError();
        }
    }
    // ...
}
这使我可以对异常设置自己的响应。这种方法有两个缺点: 我真正想做的是将控制权还原到IIS,并让其显示认的404响应,但我找不到解决方法 将为每个404显示新的响应(由
context.Response.Write()
编写),而不仅仅是代码生成的响应 因此,看起来我将需要: 从后面的代码中,重定向一个定制页面,该页面说明找不到“ thing”(这也设置了404响应代码),或者 设置自定义全局404页面     

解决方法

我怀疑这是一个干净的解决方案,但它可能会起作用... 如果您将这篇文章(以及一些类似的我相信)结合在一起。从全局asax看来,将404写入响应流似乎绕过了自定义错误。 考虑到这一点,您可以有意在后面的代码中引发自定义异常。检查Application_Error中的自定义异常,然后从那里响应404?这样会阻止页面呈现,一切都应该按照您的要求工作吗? 编辑: 如果每个404异常都显示了此代码,并且您不希望出现该异常,请为您要触发的原始​​代码创建一个自定义异常。仅在Application_Error中捕获该特定异常,是否允许其他异常照常通过? 我还发现了该线程,OP像您一样试图提高实际的404页面,而不是其模型。关于如何执行此操作,有一些建议,不知道它们是否有效,但可能值得快速尝试。     ,如何重定向到不存在的页面。     ,正如JNappi所说,@ Ben Scott说,他的方法是围绕JNappi的思想进行的一项很好的工作,我想我可以建议您一个想法。 每当遇到404错误时,请尝试显示导航到自定义404错误消息页面,但请确保服务器上不存在此类自定义404错误页面。这将自动为您引发默认的404错误消息。 这样,您可以避免302重定向消息。 但是我仍然认为这是解决方案,但希望能对您有所帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。