首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果ModelBinder抛出404异常

如果ModelBinder抛出404异常
EN

Stack Overflow用户
提问于 2012-06-27 00:12:20
回答 2查看 815关注 0票数 1

我开始将我的控制器转换为使用模型绑定器来执行GET操作,而不是使用int参数。我的普通控制器GET action看起来像下面这样…

代码语言:javascript
复制
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负责?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 00:21:18

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

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

在这种情况下,你的控制器只需要关心“快乐路径”。也就是说模型是存在的。

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 00:53:17

因此,您有一个GET操作,它根据模型的id返回一个模型。根据MVC的原理,控制器的工作是与模型交互,并为id获取相应的实例。我认为在模型绑定器中做这项工作并将模型提供给控制器操作并不是一个好主意,这就像是从控制器中夺走了核心工作。

如果将Details操作更改为,

代码语言:javascript
复制
public ActionResult Details(DomainModel model)
{
}

它看起来像是从外部将模型提供给操作的某个人,但假设操作应该以视图或json结果的形式返回模型。想一想单元测试?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11211546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档