Показать файл 404 не найден, если Catch All Route не совпадает - PullRequest
1 голос
/ 22 декабря 2009

У меня есть универсальная настройка маршрута в ASP.NET MVC, поэтому я могу захватить / эту страницу, / эту страницу и т. Д.

Когда вы нажимаете на страницу, вызывается действие, например, Index(string page), а затем page проверяется на соответствие значению в базе данных, чтобы определить, можно ли найти страницу. Если это не может быть найдено, я хочу отобразить представление FileNotFound, которое находится в моем ErrorController, я не хочу перенаправлять, поскольку я хочу сохранить URL как http: //.../ page-that-isnt-found , точно так же, как это делает StackOverflow, если вы зададите ему фиктивный вопрос - (https://stackoverflow.com/questions/zzz-aaa).

Теперь моя проблема в выяснении кода, я попробовал оба:

[ do page db check ]
if (page == null)
   return RedirectToAction("FileNotFound", "Error");
   // return View("FileNotFound"); // can't opt for a controller ?

Самое близкое, что я получаю, это RedirectToAction(), однако, конечно, он действительно выполняет перенаправление, и мой URL указывает на / error, что не является желаемым поведением. Я пытался использовать return View(), но, похоже, я не могу указать контроллер, только имя представления?

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Вы также можете использовать Server.Transfer, чтобы сохранить исходный URL. Здесь есть хорошая тема о том, как сделать это в asp.net mvc - Как смоделировать Server.Transfer в ASP.NET MVC?

1 голос
/ 22 декабря 2009

Правильно, возвращая View, вы указываете на имя View для визуализации, а не на ActionMethod. Вы должны иметь возможность создать возвращаемое представление (либо в представлениях того же контроллера, либо в общих представлениях), которое содержит содержимое страницы 404.

Надеюсь, это поможет.

...