Обслуживание страниц для кодов состояния HTTP - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь настроить 500 и 404 страницы для проекта веб-форм ASP.NET 4.5.2. У меня работает 404, когда несуществующей страницей является страница .ASPX. - У меня есть код, написанный для предоставления пользовательской страницы NotFound.aspx в ответ.

Моя проблема возникает, когда я использую Web.config для обслуживания страницы 404.html для несуществующих HTML-страниц. Моя страница 404.html находится в корневой папке. Если я проверю это с несуществующей HTML-страницей в корневой папке, 404.html будет отображаться правильно. Однако если я протестирую его с несуществующей HTML-страницей в несуществующей подпапке, файл 404.html будет доставлен, но пути CSS / JS больше не будут правильными? Это похоже на то, что трактует пути CSS / JS как относящиеся к несуществующей подпапке, которую я указываю как часть теста?

Global.asax.cs:

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    if (ex != null && ex is HttpUnhandledException)
    {
        Server.ClearError();
        Server.Transfer("~/Error.aspx", true);
    }

    if (ex != null)
    { 
        var httpException = ex as HttpException; 
        if (httpException.GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/NotFound.aspx", true); 
        }
    }
}

Web.config:

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" />
    <error statusCode="404" path="404.html" responseMode="File" />
</httpErrors>

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Я смог решить это следующим образом:

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" />
    <error statusCode="404" path="http://localhost/myproject/404.html"
        responseMode="File" />
</httpErrors>

Ключевым выводом является то, что путь должен быть абсолютным, чтобы эта версия работала. Поэтому следующим моим шагом будет попытка установить путь программно, чтобы в режиме отладки он перешел на мой локальный, а в режиме выпуска - на рабочий URL. Я не хочу связываться с файлами преобразования Web.config.

Если у кого-либо есть дополнительная информация, пожалуйста, не стесняйтесь.

0 голосов
/ 13 июня 2019

Используйте абсолютные URL-адреса для путей CSS / JS.Например, в вашем 404.html (начальная загрузка и jquery - только примеры):

<link href="/Content/bootstrap.min.css" rel="stylesheet" />
<script src="/Scripts/jquery-3.0.0.min.js"></script>
<script src="/Scripts/bootstrap.min.js"></script>

Другой настройкой будет установка responseMode="Redirect":

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" />
  <error statusCode="404" path="/Errors/404.html" responseMode="Redirect" />
</httpErrors>

В этом примере 404.html находится в папке Errors, и URL-адреса могут быть относительными:

<link href="../Content/bootstrap.min.css" rel="stylesheet" />
<script src="../Scripts/jquery-3.0.0.min.js"></script>
<script src="../Scripts/bootstrap.min.js"></script>

, и это будет работать, поскольку URL-адрес перенаправления больше не относится к тому URL-адресу, который вы запросили.

...