Подтвердить что ты не робот

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

Неверные URL-адреса, такие как http://localhost:54321/foo/bar, а ошибки, подобные HttpNotFound(), обрабатываются в моем локальном хосте без проблем. После развертывания в IIS 7.5 он возвращает пустую страницу в обоих вышеперечисленных сценариях. Я видел, что у кого-то была эта проблема Здесь (Это был комментарий от Moulde с несколькими upvotes). Код:

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>

ErrorController

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

RouteConfig

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

NotFound

<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(), он возвращает пустую страницу. Есть идеи?

Главная /Test

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

Update: Когда я перехожу на /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

4b9b3361

Ответ 1

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

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