当MVC2视图不存在时返回HTTP 404

时间:2010-05-06 10:56:38

标签: .net asp.net-mvc asp.net-mvc-2 view http-status-code-404

我只需要一个类似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 个答案:

答案 0 :(得分:6)

private bool ViewExists(string name) {
    return ViewEngines.Engines.FindView(
        ControllerContext, name, "").View != null;
}

答案 1 :(得分:0)

Darin Dimitrov的回答让我有了一个想法。

我认为最好这样做:

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;      
        }

    }