.net mvc 404自定义错误页面有时只能工作

时间:2013-01-08 14:57:41

标签: asp.net-mvc asp.net-mvc-4 error-handling custom-error-pages

我正在尝试在我的MVC 4网站上制作一个404动作来回答默认图像,无论网站在任何图像上获得404。

当我在本地运行时,一切都很精细,但是当我在我的服务器上发布我的网站时,它不起作用......

我在我的网站上.Config:

<customErrors mode="On">
   <error statusCode="404" redirect="~/Home/Error404" />
</customErrors>

在我的HomeController上:

    public ActionResult Error404()
    {
        if (Request.Url.AbsoluteUri.Contains(".jpg") || Request.Url.AbsoluteUri.Contains(".gif") || Request.Url.AbsoluteUri.Contains(".png"))
        {
            var dir = Server.MapPath("~/Content/Images/");
            var path = Path.Combine(dir, "imageNotFound400.jpg");
            return base.File(path, "image/jpeg");
        }
        return View();
    }

正如我所说,在本地运行,它工作,它返回我的默认图像, 但在线,您可以在此处看到:http://www.ipgii.org.br/Mensagem?pageSize=9&page=30 在这里:http://www.ipgii.org.br/Content/Uploads/Thumbnails/alegrai-vos-no-senhor.jpg 它转到一个丑陋的HTTP 404错误页面。

我需要帮助! =]

2 个答案:

答案 0 :(得分:2)

我写了一篇关于在ASP.Net MVC应用程序中正确设置错误页面的博客文章。

http://web.archive.org/web/20130911212149/http://blog.aquabirdconsulting.com/2012/04/19/setting-up-asp-net-mvc-error-pages/

但看起来你缺少的是:

<httpErrors existingResponse="PassThrough" />

这可确保IIS7 +不会弄乱您的错误页面。给帖子一个阅读,看看你是否做了所需的一切。


编辑(根据OP评论)

您将httpErrors标记放在system.webServer标记下。看起来应该是这样的。我在下面添加了另一个属性,可能对您要做的事情有所帮助。

<system.webServer>
    <httpErrors existingResponse="PassThrough" errorMode="Custom" />
</system.webServer>

答案 1 :(得分:0)

如果您的应用程序在本地工作没有问题,但在远程托管时遇到问题,根据我的经验,大多数情况下IIS未正确配置。

在您的情况下,我认为网站运行的帐户(AppPool帐户)可能没有/ Uploads / Thumbnails文件夹的读取权限。

其次,请检查Global.aspx.cs文件中的MapRoute是否有* .jpg文件的转义语句。也许IIS正在寻找一个处理程序来将请求传递给uri:http://www.ipgii.org.br/Content/Uploads/Thumbnails/alegrai-vos-no-senhor.jpg并且无法找到它。

以下是错误代码的原因:IIS中的0x80070002:http://support.microsoft.com/kb/942052