1

我开始切换我的控制器以使用模型绑定器进行 GET 操作,而不是使用 int 参数。我的正常控制器 GET 操作如下所示...

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 时,我想HttpExceptionBindModel方法中抛出,但是我不确定它是否被认为是一种好的编程习惯。控制器是否负责抛出 404 或 ModelBinder?

4

2 回答 2

1

模型绑定就是这样做的,绑定模型。如果模型不存在,它将返回 null 或 Null 对象。然后控制器可以决定如何处理模型。如果为空,则抛出。

但是,如果您看到出现相同的代码行,那么封装该代码是一个好主意。一种选择是使用 ActionFilter。模型绑定器创建对象,如果模型为空,动作过滤器可以将响应代码设置为 404。

在这种情况下,您的控制器只需要担心“快乐路径”。那就是模型存在。

于 2012-06-26T16:21:18.193 回答
-1

所以你有一个 GET 操作,它根据它的 id 返回一个模型。根据 MVC 的原理,控制器的工作是与模型交互并获取 id 的相应实例。我认为在模型绑定器中完成这项工作并将模型提供给控制器操作并不是一个好主意,这就像将核心工作从控制器中移开一样。

如果将Details动作更改为,

public ActionResult Details(DomainModel model)
{
}

它看起来像是从外部将模型提供给动作的人,但假设动作应该将模型作为视图或 json 结果返回。考虑单元测试?

于 2012-06-26T16:53:16.933 回答