如何创建404图像?对于ASP.NET无法读取的图像

如何创建404图像?对于ASP.NET无法读取的图像,asp.net,image,error-handling,http-status-code-404,Asp.net,Image,Error Handling,Http Status Code 404,使用ASP.NET C#,visual Studio托管文件/页面。我允许用户上传图像,并将它们重定向到媒体页面。图像位于特定路径中,使用正则表达式很容易识别。当我重定向时,会出现2个错误中的1个。1) 图像不存在(尚未生成)或2)无法打开文件(imagemagik或写入图像的内容) 当我收到这些错误时,如何停止404或其他错误,并显示“正在处理”或当前不可用的占位符图像?好的404是正确的响应代码,但您可以在images文件夹中设置自定义处理程序,以改为返回虚拟图像 编辑:要在IIS管理器中设

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


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

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


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

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


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

从理论角度来看,您不能基于路径实现自定义HTTP处理程序,类似于此处的详细说明:


实现逻辑以确定请求的文件是否存在,以及是否可以在处理程序中读取。如果不是,则以编程方式生成所需的输出,而不是404。

从理论角度看,您不能基于路径实现自定义HTTP处理程序,类似于此处详述的内容:

    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");
        }
    }

实现逻辑以确定请求的文件是否存在,以及是否可以在处理程序中读取。如果不是,则以编程方式生成所需的输出,而不是404。

我使用的是VisualStudios,而不是IIS,但无论哪种方式,都会为所有404映像设置处理程序吗?如果特定图像不存在或无法读取,是否有办法将其设置为404(使用regex进行匹配)?我使用的是VisualStudios,而不是IIS,但无论哪种方式,都会为所有404图像设置处理程序吗?如果特定图像不存在或无法读取,有没有办法将其设置为404(使用regex进行匹配)?我会在这里签入吗?我知道photobucket生成404个图像,但它们使用php。处理照片时并不常见,因此我不希望每次都检查,而只是在出现异常时检查。如果它按照我的理解工作,您可以在web.config文件中指定您关心的路径中的处理程序,从而限制调用处理程序的频率。如果Yuliy的建议有效并满足您的需要,那么它将更加直接,涉及面更小,前提是您可以在目录级别指定。我将在这里进行签入吗?我知道photobucket生成404个图像,但它们使用php。处理照片时并不常见,因此我不希望每次都检查,而只是在出现异常时检查。如果它按照我的理解工作,您可以在web.config文件中指定您关心的路径中的处理程序,从而限制调用处理程序的频率。如果Yuliy的建议能起作用并满足您的需要,那么它会更直接、更少涉及,前提是您可以在目录级别进行指定。您还需要捕获404个非.NET页面请求-默认情况下,这些页面通常由IIS处理,因此不会引发应用程序错误。将此复制到共享类中,告诉IIS使用自定义.aspx页面处理404错误,并在其中进行处理。您还需要捕获非.NET页面的404请求-默认情况下,这些请求通常由IIS处理,因此不会引发应用程序错误。将其复制到共享类中,告诉IIS使用自定义的.aspx页面处理404错误,并在其中进行处理。
    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");
        }
    }