【问题标题】:Blank custom 404 page after deploying to IIS 7.5部署到 IIS 7.5 后出现空白自定义 404 页面
【发布时间】:2015-06-15 07:54:23
【问题描述】:

http://localhost:54321/foo/bar 之类的不正确 url 和HttpNotFound() 之类的错误在我的本地主机中处理没有问题。部署到 IIS 7.5 后,它在上述两种情况下都返回一个空白页面。我见过其他人有这个问题Here(这是来自 Moulde 的评论,有几个赞成票)。代码:

Web.Config

<system.web>
  <customErrors mode="Off" redirectMode="ResponseRedirect">
    <error statusCode="404" redirect="~/Error/NotFound"/>
  </customErrors>
</system.web>
<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound"/>
  <remove statusCode="500" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/Error"/>
</httpErrors>

错误控制器

public class ErrorController : Controller
{
    public ActionResult NotFound() {
        Response.StatusCode = 404;
        Response.TrySkipIisCustomErrors = true;
        return View();
    }
}

路由配置

 routes.MapRoute(
            "Error - 404",
            "NotFound",
            new { controller = "Error", action = "NotFound" }
            );

        routes.MapRoute(
            "Error - 500",
            "Error",
            new { controller = "Error", action = "Error" }
            );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

未找到

<h2>404 Not Found</h2>
<div class="alert alert-info">
    <p><strong>Whoops...</strong></p>
    <p>The resource you were looking for doesn't exist</p>
</div>

服务器运行 Windows Server 2008 R2。当我转到 .../foo/bar 或某个操作返回 HttpNotFound() 时,它会返回一个空白页。任何想法?

首页/测试

public class HomeController: Controller{
    // ...
    public ActionResult Test(){
        return HttpNotFound();
    }
}

更新: 当我转到服务器上的/Error/NotFound 时,它也会返回一个空白页面以及 404。Fiddler 的响应:

HTTP/1.1 404 Not Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5 
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?  QzpccWhlXFByb2plY3RzXFZlbmRvclBvcnRhbFxWZW5kb3JQb3J0YWxcRXJyb3JcTm90Rm91bmQ=?=
X-Powered-By: ASP.NET
Date: Thu, 23 Apr 2015 13:24:49 GMT
Content-Length: 5434

更新 2: 如果我把existingResponse="Replace" 拿走,我可以在服务器上打开Error/NotFound。但在MyServer/MyProject/foo/bar 上仍然出现空白页

【问题讨论】:

  • 访问 /Error/NotFound 会发生什么?请与 Fiddler 核对 - 并在此处发布原始回复。
  • @PavelChuchuva 它也返回一个空白页。我已经更新了问题。
  • 你越来越近了。请尝试部署这个测试项目dl.dropbox.com/u/2019363/Test404.zip 它在 IIS 上工作吗?
  • @PavelChuchuva 它适用于我的本地主机。在使用 IIS 7.5 和 .net 4.5 部署到另一台服务器后,我可以打开 /Home 但 /Home/About 和 Error/NotFound 返回 403 禁止。我还将我的项目部署到此服务器,Error/NotFound 有效。但 Home/Test (见代码)也返回 403 禁止。

标签: asp.net iis error-handling asp.net-mvc-5 custom-errors


【解决方案1】:

在我的情况下,原因在于 IIS - Web 设置 - 请求过滤 - SQL 注入过滤器...

如果 url 或查询字符串包含 ;,则响应以状态 404.19 结束 - 被过滤规则拒绝。然后显示空白页。 IIS 重定向到这样的自定义错误 http://server.com/Error404.aspx?404;http://server.com/missingURL 和字符 ; 是请求过滤器因 SQL 注入而结束您的请求的原因。

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2014-05-14
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多