将数据从ModelBinder传递到自定义InputFormatter

时间:2018-08-13 20:38:36

标签: c# asp.net-core modelbinder inputformatter

上下文:在Asp.net Core 2.1下的WebAPI中,我必须创建一个POST端点,  [server]/MyController/{Parameter1}/MoreRouteThing/。我必须创建一个自定义IInputFormatter,因为默认格式程序无法读取该正文。

问题:要格式化输入,IInputFormatter需要知道Parameter1的值。

我实现了一个处理此模型的自定义IModelBinder,并使用自定义startup.csIModelBinderProvider中的所有内容连接起来(可能有些过头,但我想了解整个链。)

在自定义IModelBinder中,我可以使用类似{Parameter1}的方式访问bindingContext.ActionContext.RouteData.Values["Parameter1"],但是我不知道如何将其传递给IInputFormatter。前者将InputFormatterContext传递给后者,但是该上下文对象中似乎没有任何东西可以存储额外的信息。

因此,问题:如何将数据从IModelBinder传递到IInputFormatter?我是否应该直接从IInputFormatter解析url /路由,从而使它知道整个过程在“何处”? (对我来说似乎不干净。)

1 个答案:

答案 0 :(得分:0)

好鹿!所有格式化程序的列表都是通过modelbinder的构造函数传输的,将来会选择与指定条件匹配的格式化程序。可以在源代码中找到更多详细信息: https://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/ModelBinding/Binders/BodyModelBinder.cshttps://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/ModelBinding/Binders/BodyModelBinderProvider.cs