2010-01-04 15 views
44

Jak mogę rzucić 404 lub wyjątek/wyjątek FileNotFound z mojej akcji i pozwolić IIS użyć sekcji konfiguracji customErrors, aby wyświetlić stronę 404?rzucanie/zwracanie wyniku 404 lub wyjątku w Asp.net MVC i pozwalanie IIS obsługiwać go

Mam zdefiniowane tak jak moje CustomErrors

<customErrors mode="On" defaultRedirect="/trouble"> 
    <error statusCode="404" redirect="/notfound" /> 
</customErrors> 

moja pierwsza próba z ActionResult, która stara się dodać tę pracę nie robi.

public class NotFoundResult : ActionResult { 
    public NotFoundResult() { 

    } 

    public override void ExecuteResult(ControllerContext context) { 
     context.HttpContext.Response.TrySkipIisCustomErrors = false; 
     context.HttpContext.Response.StatusCode = 404; 
    } 
} 

Ale to tylko pokazuje pustą stronę i nie moje/nie-found strona

:(

Co należy zrobić?

Odpowiedz

128

ASP.NET MVC 3 wprowadzono działania HttpNotFoundResult wynik, który powinien być użyty zamiast ręcznego odrzucania wyjątku z kodem stanu http. Można to również zwrócić za pomocą metody na kontrolerze:

public ActionResult MyControllerAction() 
{ 
    ... 

    if (someNotFoundCondition) 
    { 
     return HttpNotFound(); 
    } 
} 

Przed MVC 3 trzeba było wykonać następujące czynności:

throw new HttpException(404, "HTTP/1.1 404 Not Found"); 
+1

Gdyby zdegradować tego powodu nie powinno się tego robić ręcznie. Użyj metody kontrolera HttpNotFound, jak pokazano w innej odpowiedzi. – xanadont

+8

Prawda - ale HttpNotFound został wprowadzony w ASP.NET MVC 3. To pytanie (i moja odpowiedź) poprzedziło to i było odpowiednim podejściem we wcześniejszych wersjach. Teraz edytowałem swoją odpowiedź, aby zilustrować nowsze podejście, które jest preferowane w MVC3. –

+4

Rad. Wygrałem z powrotem. – xanadont

Powiązane problemy