Mam akcję, która przyjmuje ciąg, który jest używany do pobierania niektórych danych. Jeśli ten ciąg nie powoduje zwrócenia żadnych danych (być może dlatego, że zostały usunięte), chcę zwrócić 404 i wyświetlić stronę błędu.
Obecnie używam po prostu powrotu specjalnego widoku, który wyświetla przyjazny komunikat o błędzie specyficzny dla tej akcji, informujący, że element nie został znaleziony. Działa to dobrze, ale najlepiej byłoby zwrócić kod stanu 404, aby wyszukiwarki wiedziały, że ta treść już nie istnieje i mogą ją usunąć z wyników wyszukiwania.
Jaki jest najlepszy sposób rozwiązania tego problemu?
Czy jest to tak proste, jak ustawienie Response.StatusCode = 404?
asp.net-mvc
error-handling
http-status-code-404
Paul Hiles
źródło
źródło
Odpowiedzi:
Można to zrobić na wiele sposobów,
throw new HttpException(404, "Some description");
źródło
W ASP.NET MVC 3 i nowszych można zwrócić HttpNotFoundResult z kontrolera.
źródło
return new HttpNotFoundResult("optional description");
HttpNotFound()
. Więc możeszreturn HttpNotFound("optional description")
zamiast tego wrócić .W MVC 4 i nowszych możesz użyć wbudowanych
HttpNotFound
metod pomocniczych:lub
źródło
Kod :
Web.config
źródło
Użyłem tego:
źródło
Jeśli pracujesz z .NET Core, możesz
return NotFound()
źródło
W NerdDinner np. Spróbuj go
źródło
Żaden z powyższych przykładów nie działał dla mnie, dopóki nie dodałem środkowej linii poniżej:
źródło
return HttpNotFound();
nie działa dla ciebie? Ile lat ma Twój system?return HttpNotFound();
? Działa dobrze z MVC 4 w górę. msdn.microsoft.com/en-us/library/… "Właściwość TrySkipIisCustomErrors jest używana tylko wtedy, gdy aplikacja jest hostowana w usługach IIS 7.0. W przypadku uruchamiania w trybie klasycznym w usługach IIS 7.0 wartością domyślną właściwości TrySkipIisCustomErrors jest true. Podczas pracy w trybie zintegrowanym , domyślną wartością właściwości TrySkipIisCustomErrors jest false. "Używam:
To działa dla mnie :-)
źródło
W .NET Core 1.1:
źródło
Możesz też:
źródło
Wypróbuj następujący kod demonstracyjny:
źródło