#c# #asp.net #redirect #http-status-code-404
#c# #asp.net #перенаправление #http-status-code-404
Вопрос:
Здравствуйте, я пытаюсь выполнить перенаправление, если ответ равен 404, но он работает не так, как ожидалось, можете ли вы, эксперты, увидеть проблему?. Он по-прежнему переходит к общему 404
в моем глобальном.asax
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (Response.Status == "404 Not Found")
{
string notFound = "~/custom_notfound.aspx";
Response.Redirect(notFound);
}
}
Обновить
Пробовал до сих пор
(Response.Status == "404 Not Found")
(Response.Status == "404")
(Response.StatusCode == 404)
Комментарии:
1. Вы имели в виду поставить
Response.Redirect(notFound );
?2. ах, извините за опечатку при публикации, но проблема все еще есть. Спасибо
3. можете ли вы попробовать (ответ. Статус == 404) (я не уверен, что это сработает, но попробуйте)
4. пробовал.. по-прежнему ir не распознает его, и это (ответ. StatusCode == 404), потому что (Ответ. Status == «ожидает строку»), а также пытался (Resonse. Статус == «404») и попытался (ответ. Статус == «404 не найдено») ни один из них не работал
5. (Ответ.status == HttpStatusCode. Не найдено)
Ответ №1:
Вы также можете использовать раздел пользовательских ошибок web.config — как показано здесь
например, в системе.веб-раздел,
<customErrors mode="On" defaultRedirect="/custom_error.aspx">
<error statusCode="404" redirect="/custom_notfound.aspx" />
</customErrors>
Ответ №2:
Я не думаю, что BeginRequest может знать об ошибках 404. Попробуйте вместо этого реализовать Application_Error . Проверьте, есть ли сервер.GetLastError() является HttpException , и если это так, проверьте статус.
Ответ №3:
Вы можете добавить в свой web.config для выполнения этого перенаправления, вам не нужно использовать Application_BeginRequest
для обработки этого.
См. Этот вопрос по ошибке сервера.
Если вы не можете использовать web.config, я бы установил для вашей начальной страницы значение, которого не существует, поставил точку останова в вашем BeginRequest, отладил приложение и посмотрел на запрос, чтобы узнать, как определить, что это 404. Это было бы намного проще определить оптимальное решение.
Если посмотреть на это подробнее, есть HttpStatusCode, который используется в классе HttpWebResponse . Поэтому может иметь смысл использовать другое переопределение приложения, чтобы получить ответ по умолчанию, а затем проверить его статус по перечислению.
Комментарии:
1. В любом случае, по какой-то причине они хотят, чтобы это было сделано в asax, как это можно было бы сделать там?
Ответ №4:
Вы также можете использовать web.config
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="File" >
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="404" path="404.html" />
<error statusCode="500" path="500.html" />
</httpErrors>
</system.webServer>