Пустая настраиваемая страница 404 после развертывания в IIS 7.5

В моей локальный хост без проблем. После развертывания в IIS 7.5 он возвращает пустую страницу в обоих описанных выше сценариях. Я видел, что у кого-то еще была эта проблема Здесь (это был комментарий от 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


person Quentin    schedule 09.04.2015    source источник
comment
Что происходит, когда вы посещаете /Error/NotFound? Пожалуйста, свяжитесь с Fiddler и опубликуйте необработанный ответ здесь.   -  person Pavel Chuchuva    schedule 23.04.2015
comment
@PavelChuchuva также возвращает пустую страницу. Я обновил вопрос.   -  person Quentin    schedule 23.04.2015
comment
Вы приближаетесь. Попробуйте развернуть этот тестовый проект dl.dropbox.com/u/2019363/Test404.zip Работает ли это на IIS?   -  person Pavel Chuchuva    schedule 24.04.2015
comment
@PavelChuchuva Это работает на моем локальном хосте. После развертывания на другом сервере с IIS 7.5 и .net 4.5 я могу открыть /Home, но /Home/About и Error/NotFound возвращает запрещенный код 403. Я также развернул свой проект на этом сервере, Error/NotFound работает. но Home/Test (см. код) также возвращает 403, запрещенный.   -  person Quentin    schedule 27.04.2015


Ответы (1)


В моем случае причина была в IIS - веб-настройках - Фильтрация запросов - Фильтр SQL-инъекций...

Если URL-адрес или строка запроса содержит ;, ответ заканчивается статусом 404.19 — Запрещено правилом фильтрации. Затем отображается пустая страница. IIS перенаправляет на пользовательскую ошибку, подобную этой http://server.com/Error404.aspx?404;http://server.com/missingURL и символ ; объясняют, почему фильтр запросов завершает ваш запрос из-за внедрения SQL.

person Gogosz    schedule 13.08.2015