【问题标题】:How do i create a 404 image? for images that cannot be read by ASP.NET如何创建 404 图像?对于 ASP.NET 无法读取的图像
【发布时间】:2011-01-08 16:50:37
【问题描述】:

使用 ASP.NET C#,Visual Studio 来托管文件/页面。我允许用户上传图片并将它们重定向到媒体页面。图像位于特定路径中,可使用正则表达式轻松识别。当我重定向时,我得到 2 个错误中的 1 个。 1)图像不存在(尚未生成)或 2)无法打开文件(imagemagik 或写入图像的东西)。

当我收到这些错误时,如何停止 404 或其他错误并显示“正在处理”或当前不可用的占位符图像?

【问题讨论】:

    标签: asp.net image error-handling http-status-code-404


    【解决方案1】:

    404 是正确的响应代码,但您可以在 images 文件夹中为其设置自定义处理程序以返回虚拟图像。

    编辑:要在 IIS 管理器中设置自定义处理程序,请转到该站点,然后转到错误页面。

    【讨论】:

    • 我使用的是 VisualStudios 而不是 IIS,但无论哪种方式,这会为所有 404 图像设置处理程序吗?有没有办法可以将特定图像(使用正则表达式匹配)设置为 404,如果它们不存在或无法读取?
    【解决方案2】:

    从理论上讲,您不能根据您的路径实现自定义 HTTP 处理程序,类似于此处详述的内容:http://support.microsoft.com/kb/308001

    实现逻辑以确定请求的文件是否存在并且可以在处理程序中读取。如果没有,以编程方式生成您想要的输出而不是 404。

    【讨论】:

    • 我可以在这里办理登机手续吗?我知道 photobucket 生成 404 图像,但他们使用 php。处理照片的时候并不经常,所以我不想每次都检查,只是在发生异常时。
    • 如果它按我的理解工作,您将在您关注的路径中的 web.config 文件中指定处理程序,从而限制您调用处理程序的频率。如果 Yuliy 的建议有效并完成了您的需求,那么如果您可以在目录级别指定,则它会更直接且涉及更少。
    【解决方案3】:
        protected void Application_Error(Object sender, EventArgs e)
        {
            var ex = Server.GetLastError();
            var exx = ex as HttpException;
            HttpContext ctx = HttpContext.Current;
            var url = MyCode.CleanPath(ctx);
            if (MyCode.SomeRegexPattern.IsMatch(url))
            {
                var code = ctx.Response.StatusCode;
                if (exx != null)
                    ctx.Response.StatusCode = exx.GetHttpCode();
                else if (ex.Message.IndexOf("cannot access the file") != -1)
                    ctx.Response.StatusCode = 500;
                ctx.Response.ContentType = "image/gif";
                Server.Transfer("path/to/processing.gif");
            }
        }
    

    【讨论】:

    • 您还需要捕获对非 .NET 页面的 404 请求 - 默认情况下,这些请求通常由 IIS 处理,因此不会引发应用程序错误。将其复制到共享类中,告诉 IIS 使用自定义 .aspx 页面来处理 404 错误,并在其中进行处理。
    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2015-11-06
    • 2020-12-05
    相关资源
    最近更新 更多