我只需要一个类似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?
可能我可以检查适当位置的文件并缓存结果,但感觉非常脏。
谢谢,
德米特里。
答案 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;
}
}