如何从BindingContext中读取未命名的对象

时间:2019-03-30 14:34:14

标签: c# .net json asp.net-core custom-model-binder

我需要实现自定义模型绑定,因此尝试为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}}中,我还看到VisualStudiobindingContext.ValueProvider.Count is 1的{​​{1}}的{​​{1}}和bindingContext.ModelMetadata的{ {1}}和Parameterperson。令人惊讶的是,TypePerson,而bindingContext.FieldName总是person

谁能帮助我从bindingProvider.Result获得Failed。如果在这种情况下无法获取bindingContext.ModelName,那么我如何从String.Empty读取ModelName对象?

1 个答案:

答案 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