2010-10-14 114 views
19

我正在尝试为客户提出请求,如果客户不存在,它应该返回某种“未找到”页面。下面哪个是用于这样的任务的最佳实践,为什么?ASP.NET MVC - HttpException或返回视图?

public ActionResult Index(int id) 
{ 
    if (customerService.GetCustomerById(id) == null) 
     return View("NotFound"); 

    return View(); 
} 

public ActionResult Index(int id) 
{ 
    if (customerService.GetCustomerById(id) == null) 
     throw new HttpException(404, "Customer not found"); 

    return View(); 
} 
+0

Exception对最终用户意味着什么?另外,为什么你发布链接到不存在的客户ID? :) – bzlm 2010-10-14 16:20:22

+0

它应该告诉最终用户该用户dosent存在。回答你的第二个问题是,如果有人删除了一个客户,而另一个没有更新他/她的浏览器,那么链接仍然列出,点击时会引发意外的异常。 – ebb 2010-10-14 16:22:28

+0

只是为了退缩,如果一个人手动输入一个坏的身份证会怎么样? 404. – 2012-06-27 11:25:10

回答

6

扔404.真的没有理由。这不是成为REST门徒,而是网络的工作原理。

您可以返回一个视图 a 404。帮助用户或提供搜索框或指向某些畅销商品通常会很有帮助,但会将NotFound清除给客户,并始终返回404 HTTP响应。毫无疑问。

编辑:这是很好的指导:http://www.codinghorror.com/blog/2007/03/creating-user-friendly-404-pages.html

2

这是一个很好的问题(+1),因为有一些不同的意见在那里有关何时使用HTTP异常代码,当没有。

REST门徒可能会告诉你去HTTP异常路由,因为他们认为URI标识了一个概念资源(即:你引用的实际对象/事物 - 在这种情况下是一个Customer),如果资源不存在,那么你应该得到一个404错误。

但是,有些人会不同意,并且说如果物理资源(例如,一个文件,不存在。

我倾向于陷入第二阵营,并建议您返回200 OK以自定义视图表明无法找到由ID指定的客户。

+0

自定义视图将错误消息的参数和响应代码设置为200将是前进的方向吗? – ebb 2010-10-14 16:27:03

+0

这是我的建议,是的。就像我说的,这只是一种意见,并不一定是编纂的最佳做法,所以你可以做任何你想做的事情。 – 2010-10-14 16:28:18

+3

搜索引擎优化的理由是否会让404更安全? – David 2011-02-08 16:49:27