我需要实现自定义模型绑定,因此尝试为IModelBinder
应用程序实现.Net Core 2.1 API
。
Model
类-
[ModelBinder(BinderType = typeof(PersonBinder))]
public class Person
{
public name {get;set;}
public address {get;set;}
}
API
方法-
[HttpPost]
[Route("process")]
public async Task<ActionResult<int>> ProcessAsync([ModelBinder(typeof(PersonBinder))]Person person)
{
...
}
绑定模型方法-
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var modelName = bindingContext.ModelName; //modelName is empty string
...
}
我用于测试的邮递员请求在JSON
中有body
个对象,它的最简单形式是这样的-
{
"name": "name1"
"address": "address1"
}
请注意,此请求来自我无法控制的现有旧客户端,并且JSON
中作为正文出现的POST
对象将没有名称。
在QuickWatch
的{{1}}中,我还看到VisualStudio
和bindingContext.ValueProvider.Count is 1
的{{1}}的{{1}}和bindingContext.ModelMetadata
的{ {1}}和Parameter
是person
。令人惊讶的是,Type
是Person
,而bindingContext.FieldName
总是person
谁能帮助我从bindingProvider.Result
获得Failed
。如果在这种情况下无法获取bindingContext.ModelName
,那么我如何从String.Empty
读取ModelName
对象?
答案 0 :(得分:0)
我已经找到了读取已发布参数的最佳方法,并且由于我没有对此问题有任何答复,因此我将发布我的操作方式,如果它对其他人有帮助的话
import subprocess
import config
file_cmd = '<command> <filename>'
for rec in (subprocess.check_output([file_cmd], shell=True).decode(config.ENCODING).split('\n')):
yield rec