Возврат HTTP 404, если представление MVC2 не существует - PullRequest
1 голос
/ 06 мая 2010

Мне просто нужен маленький CMS-подобный контроллер.Самый простой способ будет выглядеть примерно так:

public class HomeController : Controller {
    public ActionResult View(string name) {
        if (!ViewExists(name))
            return new HttpNotFoundResult();
        return View(name);
    }

    private bool ViewExists(string name) {
        // How to check if the view exists without checking the file itself?
    }
}

Вопрос в том, как вернуть HTTP 404, если нет доступного представления?кэшируйте результат, но это выглядит очень грязно.

Спасибо,
Дмитрий.

Ответы [ 2 ]

6 голосов
/ 06 мая 2010
private bool ViewExists(string name) {
    return ViewEngines.Engines.FindView(
        ControllerContext, name, "").View != null;
}
0 голосов
/ 06 мая 2010

Ответ Дарина Димитрова дал мне представление.

Я думаю, что было бы лучше сделать это:

public class HomeController : Controller {
    public ActionResult View(string name) {
        return new ViewResultWithHttpNotFound { ViewName = name};
    }
}

с новым типом результата действия:

    public class ViewResultWithHttpNotFound : ViewResult {

        protected override ViewEngineResult FindView(ControllerContext context) {
            ViewEngineResult result = ViewEngineCollection.FindView(context, ViewName, MasterName);
            if (result.View == null)
                throw new HttpException(404, "Not Found");
            return result;      
        }

    }
...