2010-01-04 3 views
44

Как мне удалить исключение/результат 404 или FileNotFound из моего действия и позволить IIS использовать мою конфигурацию config.exp для отображения страницы 404?бросать/возвращать 404 actionresult или исключение в Asp.net MVC и разрешать IIS обрабатывать его

Я определил мои CustomErrors как так

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

Моя первая попытка на ActionResult, который пытается добавить не работает.

public class NotFoundResult : ActionResult { 
    public NotFoundResult() { 

    } 

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

Но это просто показывает пустую страницу, а не мой/не обретенная страница

:(

Что я должен делать?

ответ

128

ASP.NET MVC 3 представил HttpNotFoundResult действие результат, который следует использовать вместо того, чтобы вручную перебрасывать исключение с кодом состояния http. Это также может быть возвращено с помощью метода Controller.HttpNotFound на контроллере:

public ActionResult MyControllerAction() 
{ 
    ... 

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

До MVC 3 вы должны были сделать следующее:

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

Если бы разжаловать это потому, что один не должны делать это вручную. Используйте метод HttpNotFound Controller, как показано в другом ответе. – xanadont

+8

Истина - но HttpNotFound был представлен в ASP.NET MVC 3. Этот вопрос (и мой ответ) предустановил это и был подходящим подходом в более ранних версиях. Теперь я отредактировал свой ответ, чтобы проиллюстрировать более новый подход, который предпочтительнее в MVC3. –

+4

Рад. Проголосовал за резервное копирование. – xanadont

Смежные вопросы