当没有与给定id关联的记录时,action方法应该执行哪些操作?返回NoFound视图或重定向到NoFound操作方法?

时间:2011-02-17 01:47:30

标签: asp.net asp.net-mvc asp.net-mvc-3

DetailsEditDelete操作方法中,我们有id参数从数据库中检索相应的记录。

如果没有记录与id对应,我们有两个选择:

  

执行操作方法返回一个   特定视图,通常命名为   NoFound.cshtml下的Views\Shared   目录,通知用户该   id无效。

  

执行操作方法重定向   用户使用特定的动作方法,   例如public ActionResult NoFound (string message),以通知   用户关于这个问题。

我的问题是: 当没有与给定id关联的记录时,action方法应该执行哪些操作?返回NoFound视图或重定向到NoFound操作方法?

修改1 我需要从技术角度出发的理由,例如安全性和性能。

4 个答案:

答案 0 :(得分:9)

这都是个人喜好。在我看来,在这种情况下应该发生的真实事情是应该将404响应代码发送回客户端。您可以拥有自定义的404页面,为您提供两全其美的效果。

答案 1 :(得分:1)

请参阅this answer上的第5步 - 自定义404,正确的404响应代码,正确处理“未找到项目”案例。

答案 2 :(得分:0)

我会返回一个“未找到”视图,因为这样一个带ID的URL可以存储在收藏夹中,并且当具有此ID的记录可用时将变为有效。

答案 3 :(得分:0)

我建议仍然会返回404错误。路线中参数的顺序无关紧要,有些人更喜欢{controller} / {action} / {id},在某些情况下{controller} / {id} / {action}可能更有意义。在任何一种情况下,如果需要所有三个参数才能将其视为有效请求且缺少一个参数,则应返回404.它还将使您的网站测试变得更加容易,就像您返回视图一样,结果代码为200并且使追踪断开的链接变得更加困难。在进行现场分析时,404错误被普遍认为是一个问题。