Jak zmusić MVC action do powrotu 404

Mam akcję, która trwa w ciągu znaków, który jest używany do pobierania niektórych danych. Jeśli ten ciąg spowoduje, że żadne dane nie zostaną zwrócone (może dlatego, że zostały usunięte), chcę zwrócić 404 i wyświetlić stronę błędu.

Obecnie używam tylko return specjalnego widoku, który wyświetla przyjazny komunikat o błędzie specyficzny dla tej akcji, mówiący, że element nie został znaleziony. Działa to dobrze, ale najlepiej byłoby zwrócić kod statusu 404, aby Wyszukiwarki wiedziały, że ta treść nie jest już istnieje i może usunąć go z wyników wyszukiwania.

Jaki jest najlepszy sposób na to?

Jest to tak proste, jak ustawienie odpowiedzi.StatusCode = 404?

Author: Paul Hiles, 2010-06-01

12 answers

Istnieje wiele sposobów, aby to zrobić,

  1. Masz rację w kodzie aspx można go przypisać w określony sposób
  2. throw new HttpException(404, "Some description");
 95
Author: Dewfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 20:33:42

W ASP.NET MVC 3 i wyżej możesz zwrócić HttpNotFoundResult z kontrolera.

return new HttpNotFoundResult("optional description");
 138
Author: Stefan Paul Noack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 20:30:11

W MVC 4 i wyżej możesz użyć wbudowanych metod pomocniczych HttpNotFound:

if (notWhatIExpected)
{
    return HttpNotFound();
}

Lub

if (notWhatIExpected)
{
    return HttpNotFound("I did not find message goes here");
}
 53
Author: Gone Coding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 10:37:13

Kod:

if (id == null)
{
  throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}

Www.config

<customErrors mode="On">
  <error statusCode="404" redirect="/Home/NotFound" />
</customErrors>
 24
Author: Sinan BARAN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 17:52:34

Użyłem tego:

Response.StatusCode = 404;
return null;
 9
Author: Wout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-19 21:46:20

In NerdDinner eg. Try it

public ActionResult Details(int? id) {
    if (id == null) {
        return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
    }
    ...
}
 5
Author: cem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-01 12:40:52

Jeśli pracujesz z. Net Core, możesz return NotFound()

 5
Author: Robert Paulsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-13 21:04:19

Żaden z powyższych przykładów nie zadziałał dla mnie, dopóki nie dodałem linii środkowej poniżej:

public ActionResult FourOhFour()
{
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true; // this line made it work
    return View();
}
 4
Author: ganders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 05:48:30

Używam:

Response.Status = "404 NotFound";

To mi działa: -)

 2
Author: bruno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-01 09:26:33

W. NET Core 1.1:

return new NotFoundObjectResult(null);
 1
Author: feedthedogs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-16 11:04:59

Możesz również zrobić:

        if (response.Data.IsPresent == false)
        {
            return StatusCode(HttpStatusCode.NoContent);
        }
 0
Author: Christof Mehlstäubler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 15:07:30

Wypróbuj poniższy kod demo:

public ActionResult Test()

{
  return new HttpStatusCodeResult (404,"Not found");
}
 -1
Author: user4326800,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-05 00:41:04