另一个意见问题:
检查MVC控制器中的空值是否合适(在您看来)。例如,如果你有一个编辑控制器根据id从db中获取记录,那么如果找不到该记录你该怎么办?我找到this article,但我不确定我喜欢那种方法。您是否只使用if语句检查并重定向到404页面?你用什么解决方案?
答案 0 :(得分:2)
我不知道这是否是最佳做法,但我检查了if并重定向到“NotFound”视图,该视图声明“公司/客户/您请求的任何内容不存在或已被删除”。
这样做只是b / c我在设置网站骨架时遵循NerdDinner tutorial,这就是他们的做法。
答案 1 :(得分:0)
这就是我在博客中所做的:
public ActionResult DisplayPublication (int nr)
{
if (!PublicationExists (nr))
throw new (HttpException (404, ""));
// ....
return ...;
}
作为拇指的一般规则,如果请求的资源实际上不存在,则返回HTTP 404.绝对不返回200 OK以及有关缺失资源的消息。如果未找到,则应为404.如果您更改了网址的结构,请考虑301 Moved Permanently。
根据您正在开发的软件的类型和逻辑,您可能决定对这种情况做出不同的反应,这取决于您。
答案 2 :(得分:0)
我使用的方法类似于您链接的文章:如果视图模型为null,则返回404的动作过滤器。我将它与自定义动作调用程序(如this)结合起来,这样我就不必将过滤器属性放在所有内容上。
由于我提到过,如果你采取行动过滤路线,你可以采取其他几种行动。我有/过滤器将:
我正在考虑将这些重构为一个约定注册表,所以我可以有类似的东西:
When.ModelIsNull.RedirectTo<SharedController>(c => c.NotFound());
For("Edit").ModelStateIsInvalid.Redisplay();
For("Edit").OnSuccess.RedirectTo("Index");
On<SecurityException>().RedirectTo<SharedController>(c => c.AccessDenied());
然后,如果我想改变特定行为的工作方式,我只需在一个地方更改它。例如,我可以重定向到View视图,而不是转到Index。
For("Edit").OnSuccess.RedirectTo("View");
我希望这会给你一些想法。
编辑: Here是如何使用FubuMVC(我喜欢从中窃取想法)来完成类似的事情。