在Details
,Edit
,Delete
操作方法中,我们有id
参数从数据库中检索相应的记录。
如果没有记录与id
对应,我们有两个选择:
执行操作方法返回一个 特定视图,通常命名为
NoFound.cshtml
下的Views\Shared
目录,通知用户该id
无效。
或
执行操作方法重定向 用户使用特定的动作方法, 例如
public ActionResult NoFound (string message)
,以通知 用户关于这个问题。
我的问题是:
当没有与给定id关联的记录时,action方法应该执行哪些操作?返回NoFound
视图或重定向到NoFound
操作方法?
修改1 我需要从技术角度出发的理由,例如安全性和性能。
答案 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错误被普遍认为是一个问题。