上下文:在Asp.net Core 2.1下的WebAPI中,我必须创建一个POST端点,
[server]/MyController/{Parameter1}/MoreRouteThing/
。我必须创建一个自定义IInputFormatter
,因为默认格式程序无法读取该正文。
问题:要格式化输入,IInputFormatter
需要知道Parameter1
的值。
我实现了一个处理此模型的自定义IModelBinder
,并使用自定义startup.cs
将IModelBinderProvider
中的所有内容连接起来(可能有些过头,但我想了解整个链。)
在自定义IModelBinder
中,我可以使用类似{Parameter1}
的方式访问bindingContext.ActionContext.RouteData.Values["Parameter1"]
,但是我不知道如何将其传递给IInputFormatter
。前者将InputFormatterContext
传递给后者,但是该上下文对象中似乎没有任何东西可以存储额外的信息。
因此,问题:如何将数据从IModelBinder
传递到IInputFormatter
?我是否应该直接从IInputFormatter
解析url /路由,从而使它知道整个过程在“何处”? (对我来说似乎不干净。)
答案 0 :(得分:0)
好鹿!所有格式化程序的列表都是通过modelbinder的构造函数传输的,将来会选择与指定条件匹配的格式化程序。可以在源代码中找到更多详细信息: https://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/ModelBinding/Binders/BodyModelBinder.cs 和 https://github.com/aspnet/AspNetCore/blob/master/src/Mvc/Mvc.Core/src/ModelBinding/Binders/BodyModelBinderProvider.cs