如何从 WebAPI 中的自定义绑定器调用默认模型绑定?

2024-04-17

我在 WebAPI 中有一个自定义模型绑定器,它使用“Sytem.Web.Http.ModelBinding”命名空间中的以下方法,该方法is用于为 Web API 创建自定义模型绑定程序的正确命名空间:

public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{

}

我有一个HTTP POST在我想使用此自定义模型绑定程序的控制器上。发布的对象包含大约 100 个字段。我想改变其中2个。我需要的是发生默认模型绑定,然后操作这两个字段的模型绑定对象,以便一旦控制器接收到该对象,它就是原始的。

问题是我似乎无法使用上面模型绑定方法中的默认绑定器来模型绑定我的对象。在MVC有以下情况:

base.BindModel(controllerContext, bindingContext);

同样的方法可以not在 WebAPI 中工作。也许我会犯这个错误,还有另一种方法可以完成我想要的事情,所以如果自定义模型绑定器不是正确的方法,请提出建议。我试图阻止做的是必须操纵控制器内发布的对象。我可以技术上在模型绑定之后执行此操作,但我尝试在调用堆栈的早期执行此操作,以便控制器无需担心这两个字段的自定义操作。

我如何启动默认模型绑定bindingContext在我的自定义模型绑定器中,以便我有一个完全填充的对象,然后我可以在返回之前操作/按摩我需要的最后两个字段?


在 WebApi 中,“默认”模型绑定器是CompositeModelBinder它包装了所有已注册的模型绑定程序。如果你想重用它的功能,你可以这样做:

public class MyModelBinder : IModelBinder
{
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        if (bindingContext.ModelType != typeof(MyModel)) return false;

        //this is the default webapi model binder provider
        var provider = new CompositeModelBinderProvider(actionContext.ControllerContext.Configuration.Services.GetModelBinderProviders());
        //the default webapi model binder
        var binder = provider.GetBinder(actionContext.ControllerContext.Configuration, typeof(MyModel));

        //let the default binder do it's thing
        var result = binder.BindModel(actionContext, bindingContext);
        if (result == false) return false;

        //TODO: continue with your own binding logic....
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 WebAPI 中的自定义绑定器调用默认模型绑定? 的相关文章

随机推荐

  • 对外部程序的非阻塞调用,不会丢失返回码

    当从 Matlab 中启动外部程序 为了简洁起见 我们将其称为 EX 时 我可以这样做 status result system EX exe 它将阻塞直到 EX 返回 或者像这样 status result system start EX
  • 如何在winform和wpf中以编程方式实现鼠标移动、单击、右键单击和按键等?

    如何在 winform 和 wpf 中以编程方式移动鼠标 单击 右键单击和按键等 如果可能的话 请帮我提供代码片段 如果我正确理解你的问题 那么你想真正模拟输入 在这种情况下SendInput是要走的路 从这个链接 http robrely
  • 存储过程中的 SQL case 语句

    我有一个包含 CASE 语句的 SQL Server 存储过程 但是 如果多个条件成立 我需要附加这些值 因此 如果某个特定记录有失效日期 And 超出里程 我希望这两个值都显示在不可归档原因柱子 我将如何实现这一目标 CASE WHEN
  • 查找列表中不常见的元素

    我正在尝试编写一段可以自动分解表达式的代码 例如 如果我有两个列表 1 2 3 4 和 2 3 5 代码应该能够找到两个列表 2 3 中的公共元素 并组合其余的元素元素一起组成一个新列表 即 1 4 5 从这篇文章 如何找到列表交集 htt
  • Perl 6 语法与我认为的不匹配

    我正在做代码出现第 9 天 http adventofcode com 2017 day 9 您坐了一会儿并记录了流的一部分 您的谜题输入 这些字符代表组 开头的序列 并结束于 在一个组内 有零个或多个其他东西 用逗号分隔 要么是另一个组
  • Python 中检查两个冻结集是否相等的时间复杂度

    在网上找不到详细信息 当比较两个冻结集时 Python 是否会迭代其中一个集合中的元素 或者是否检查冻结集的哈希值 因为冻结集是可哈希的 由于参考文档对此没有任何说明 因此它依赖于实现 因此除了查看您正在使用的 Python 版本的源代码
  • Kotlin 中的变量,与 Java 的区别:“var”与“val”?

    我在尝试学习Kotlin https en wikipedia org wiki Kotlin programming language 什么是val var and internalKotlin 与 Java 相比 In Java Rad
  • 在 NSTextField 中输入时过滤 NSTable - 自动选择第一行

    我有一个NSTextView过滤的字段NSTable表作为用户在输入中键入的内容 我已经成功实现了表过滤 现在 我的目标是自动选择第一个结果 表中的第一行 并允许用户在键入搜索查询时使用箭头键在结果之间移动 在表中的结果之间移动时 输入字段
  • 如何在 Windows 上的 Perl 中访问包含空格的路径?

    我正在将 Unix Perl 脚本转换为在 Windows 上运行 我遇到的问题是路径中含有空格 open IN C Program Files MySQL MySQL Server 5 1 bin mysql exe u root ppw
  • 从 App.xaml.cs 导航

    我想将应用程序栏添加到我的应用程序的多个页面 因此 我将应用程序栏定义为应用程序资源 以便它可以被多个页面使用 现在 这些按钮的事件处理程序位于App这里提到的类http msdn microsoft com en us library h
  • 如何确定所选节点是 TreeView 中的子节点还是父节点?

    如何判断所选节点是子节点还是父节点TreeView控制 具体如何实现此类检查取决于您如何定义 子 和 父 节点 但每个都暴露了两个属性TreeNode提供重要信息的对象 The Nodes财产 http msdn microsoft com
  • 如何编写本地化的屏幕键盘

    我必须为我们公司的程序编写一个屏幕键盘 该程序主要用于具有触摸功能的工业PC 我们不能使用windows默认键盘 因为我们不需要键盘上的所有按键 所以我被要求用 C 编写一个自定义的 我已经找到了这个博客 http www siao2 co
  • pandas - 数据框中唯一行出现的数量

    如何计算每个唯一行的出现次数DataFrame data x1 A B A A B A A A x2 1 3 2 2 3 1 2 3 df pd DataFrame data df x1 x2 0 A 1 1 B 3 2 A 2 3 A 2
  • AWS Lambda:无法导入模块

    请原谅我 我对 Lambda 和 Node 都是新手 我正在尝试复制this https gist github com bhberson 7a2847888596e67fd69bgit 使用 AWS IoT 按钮订购披萨 我当前的代码是
  • 根据屏幕尺寸有固定方向

    我在手机上构建了一个 Android 应用程序 现在我要更新该应用程序以支持平板电脑尺寸的屏幕 特别是 Galaxy Tab 10 1 我弄清楚了整个res layout的事情 所以没关系 但是 我构建的应用程序具有固定的屏幕方向Andro
  • iPhone 平台的开源框架/项目 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适用于 iPhone 平台的开源框架 项目集合 我发现了很多好的框架和资源 例如ASIHTTP
  • 使用 appSettings 配置自定义 Serilog 接收器

    我创建了一个新的 Serilog 自定义接收器 并尝试通过 appSettings 配置它 自定义接收器名为 DiagnosticsBroadcaster 它的 LoggerSinkConfiguration 扩展是 public stat
  • 更新 WooCommerce 产品价格和库存

    我有外部 REST API 我从中构建一个如下所示的数组 arr array 1 gt array code gt 0100686 qty gt 2 price gt 65 22 2 gt array code gt 0100687 qty
  • 使用groupSVGElements后如何选择子元素

    我正在将 svg 加载到具有子元素的 Fabric 中 我使用 groupSVGElements 对它们进行分组 我需要能够选择每个子元素 这是一个 onclick 事件 允许我选择一个子对象 我把这个小提琴放在一起http jsfiddl
  • 如何从 WebAPI 中的自定义绑定器调用默认模型绑定?

    我在 WebAPI 中有一个自定义模型绑定器 它使用 Sytem Web Http ModelBinding 命名空间中的以下方法 该方法is用于为 Web API 创建自定义模型绑定程序的正确命名空间 public bool BindMo