Как вернуть ошибку 404 для несуществующей страницы? - PullRequest
1 голос
/ 17 января 2020

Я работаю над веб-приложением с документацией .NET / C#. При щелчке ссылки на веб-сайте документ выбирается по имени и отображается страница.

Процесс состоит в том, что в именах этих документов есть пробелы, поэтому при нажатии на ссылку на веб-сайте запрос заменяет пробелы на% 20 при отправке. Этот URL-адрес запроса удаляется из% 20, чтобы получить фактическое имя документа с пробелами на сервере.

Проблема в том, что если я ввожу имя документа в URL-адресе без пробелов, вместо этого возникает внутренняя ошибка 404 ошибка. Кто-нибудь знает, как это исправить?

Например:

  • Имя документа: Установка Prereq.md
  • Фактический URL: /home/documentation/Installation%20Prereq.md -> это успешно возвращает do c

Но,

  • Ошибка URL: /home/documentation/InstallationPrereq.d -> это возвращает ошибку 500, я хотел бы установить эту ошибку до 404, так как нет документа с таким названием.

1 Ответ

2 голосов
/ 17 января 2020

. NET выдает исключение при попытке получить доступ / вернуть файл, который не существует. Это исключение перехватывается IIS (если ваше приложение не обрабатывает его), которое возвращает HTTP-ответ с кодом состояния 500.

Решение состоит в том, чтобы проверить, существует ли файл, ie File.Exists("folder/filename")

И если он вернет false, дайте ему знать о действии вашего контроллера, которое, как он получит, может вернуть ответ с 404 кодом состояния:

public ActionResult ControllerAction(string filename)
{
    var theFile = TryFindFile(filename, out fileFound);

    if (fileFound == false)
        return new HttpNotFoundResult(); // this returns a HTTP response with 404 status code

    return theFile;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...