0

Один из наших устаревших сайтов, основанный на классической технологии ASP.NET, был перенесен на новый хостинг. Теперь это облако с Windows Azure Pack, в котором наш сайт работает под .NET Framework 4.6.1.Не удается вернуть статус HTTP 404 для страницы пользовательских ошибок в ASP.NET

Однако я все еще не могу вернуть страницу пользовательской ошибки для несуществующего ресурса .aspx с правильным HTTP-статусом 404 - статус всегда равен 302. Первоначально пользовательская страница ошибки 404 была определена как это в сети. конфиг:

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <error statusCode="404" redirect="/error/resource-not-found.aspx"/> 
    </customErrors> 
</system.web> 

Я прочитал SO сообщения как this и попытался предлагаемые ответы, включая настройки redirectMode для ResponseRewrite, но ничего не помогало или не работать, как ожидалось.

Я что-то пропустил или есть другое решение?

ответ

0

Мне удалось преодолеть эту проблему. Во-первых, я отключил перенаправление для Error 404 в сети.конфигурации:

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <!-- <error statusCode="404" redirect="/error/resource-not-found.aspx"/> --> 
    </customErrors> 
</system.web> 

Затем я добавил следующий обработчик события Application_Error моей Global.asax:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
    Dim serverError As HttpException = DirectCast(Server.GetLastError(), HttpException) 

    If Not serverError Is Nothing Then 
     If 404 = serverError.GetHttpCode() Then 
      Server.ClearError() 
      Server.Transfer("/error/resource-not-found.aspx") 
     End If 
    End If 
End Sub 

Наконец, я добавил строки ниже моей странице ошибки 404. (ресурсы не обретенные. ASPX):

Sub Page_Load() 
    ' If you're running under IIS 7 in Integrated mode set, 
    ' use this line to override IIS errors: 
    Response.TrySkipIisCustomErrors = True 

    Response.StatusCode = 404 
    Response.StatusDescription = "Page not found" 
End Sub 

FYI: Если вы используете технологию MasterPage, только переменная часть вашего MasterPage перенаправляется. После игры с несуществующими ресурсами в различных разделах нашего сайта, я нашел это поведение умным и полезным для наших конечных пользователей.

ОДНА БОЛЬШЕ. Для того, чтобы вернуть код состояния HTTP 404 для не ASPX ресурсов, я использую следующий параметр в моем web.config:

<system.webServer> 
    <httpErrors errorMode="Custom" defaultResponseMode="Redirect"> 
     <remove statusCode="404"/> 
     <error statusCode="404" path="/error/resource-not-found.aspx" responseMode="ExecuteURL"/> 
    </httpErrors> 
</system.webServer> 

Обратите внимание на responseMode установлен в «ExecuteURL» для ошибки 404.

0

Я не сделал много с .aspx Я просто прибегая к помощи и мне интересно, если у вас есть

<% Response.StatusCode = 404 %> 

на вершине вы 404.aspx страницу?

+0

I получите круговое бесконечное перенаправление на мою страницу 404, если я добавлю это в Page_Load. – TecMan

1

Однако я до сих пор не может вернуть страницу ошибки для несуществующего .aspx ресурса с правильным статусом HTTP 404 - статус всегда 302.

Насколько мне известно , HTTP 302 означает, что запрошенный ресурс был перемещен в другое место. Основываясь на вашем описании, я создал веб-приложение ASP.NET и развернул его в Azure Web App с настраиваемой конфигурацией ошибок, которую вы предоставили.

Вот мой подробный тест:

  1. Выключите режим CustomErrors

    Если запрошенный ресурс не найден, то вы можете получить заголовок ответа следующим образом с помощью Fiddler или инструментов разработчика в вашем браузере.

  2. Установите режим CustomErrors как RemoteOnly

    С конфигурацией при условии, если запрашиваемый ресурс не найден, вы можете получить подробную информацию следующим образом:

После испытания я успешно проверил как на своей стороне, так и на Azure Web App. Попробуйте проверить заголовок местоположения, когда вы получите ответ 302 через Fiddler. Кроме того, если вы надеетесь, что, когда ресурс не будет найден, и браузер перенаправит страницу ресурса-not-found.aspx с кодом статуса 404, вы можете следовать этому связанному thread.

+0

Почему вы переписали то, что я написал в своем вопросе? Но ваша ссылка на связанный поток помогла мне найти частичное решение моей проблемы. См. Мой ответ. – TecMan

Смежные вопросы