我开始将我的控制器转换为使用模型绑定器来执行GET操作,而不是使用int参数。我的普通控制器GET action看起来像下面这样…
public ActionResult Details(int id)
{
DomainModel model = repository.GetById(id);
if (model == null)
{
throw new HttpException(404, "Item does not exist")
}
//Continue along with our controller action
}当切换到ModelBinder时,我想在BindModel方法中抛出HttpException,但是我不确定这是否被认为是一个好的编程实践。控制器是否对抛出404或ModelBinder负责?
发布于 2012-06-27 00:21:18
模型绑定就是这样做的,绑定模型。如果模型不存在,它将返回null或Null对象。然后,控制器可以决定如何处理模型。如果为null,则抛出。
但是,如果您看到的代码行与出现的代码行相同,那么封装这些代码是一个好主意。一种选择是使用ActionFilter。模型绑定器创建对象,如果模型为空,则操作过滤器可以将响应代码设置为404。
在这种情况下,你的控制器只需要关心“快乐路径”。也就是说模型是存在的。
发布于 2012-06-27 00:53:17
因此,您有一个GET操作,它根据模型的id返回一个模型。根据MVC的原理,控制器的工作是与模型交互,并为id获取相应的实例。我认为在模型绑定器中做这项工作并将模型提供给控制器操作并不是一个好主意,这就像是从控制器中夺走了核心工作。
如果将Details操作更改为,
public ActionResult Details(DomainModel model)
{
}它看起来像是从外部将模型提供给操作的某个人,但假设操作应该以视图或json结果的形式返回模型。想一想单元测试?
https://stackoverflow.com/questions/11211546
复制相似问题