Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从BindingContext读取未命名对象_C#_.net_Json_Asp.net Core_Custom Model Binder - Fatal编程技术网

C# 如何从BindingContext读取未命名对象

C# 如何从BindingContext读取未命名对象,c#,.net,json,asp.net-core,custom-model-binder,C#,.net,Json,Asp.net Core,Custom Model Binder,我需要实现自定义模型绑定,因此尝试为.netcore2.1api应用程序实现IModelBinder 型号等级- [ModelBinder(BinderType = typeof(PersonBinder))] public class Person { public name {get;set;} public address {get;set;} } API方法- [HttpPost] [Route("process")] public async

我需要实现自定义模型绑定,因此尝试为
.netcore2.1api
应用程序实现
IModelBinder

型号
等级-

  [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
对象,最简单的形式如下-

{
    "name": "name1"
    "address": "address1" 
}
请注意,此请求来自我无法控制的现有遗留客户端,并且
JSON
对象(将作为
POST
中的主体)将没有名称

VisualStudio
中的
QuickWatch
中,我还看到
bindingContext.ValueProvider.Count是1
bindingContext.ModelMetadata
具有
person
参数
person
类型。令人惊讶的是,
bindingProvider.Result
Failed
bindingContext.ModelName
总是
String.Empty


谁能帮我从
BindingContext
获取
ModelName
。如果在这种情况下无法获取
ModelName
,那么如何从
BindingContext
读取
Person
对象?

我已经找到了读取发布参数的最佳方法,并且由于我没有得到对这个问题的任何响应,如果这对其他人有帮助,我将发布我是如何做到的

        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var request = bindingContext.HttpContext.Request;

            using (var reader = new StreamReader(request.Body, Encoding.UTF8))
            {
                var bodyString = reader.ReadToEnd();
                var person = bodyString.DeSerialize<Person>(); //this is custom logic to de-serialize to object from JSON string

                //write your model binding logic here...

                bindingContext.Result = ModelBindingResult.Success(person);
            }

            return Task.CompletedTask;
        }
公共任务BindModelAsync(ModelBindingContext bindingContext) { var request=bindingContext.HttpContext.request; 使用(var reader=newstreamreader(request.Body,Encoding.UTF8)) { var bodyString=reader.ReadToEnd(); var person=bodyString.DeSerialize();//这是从JSON字符串反序列化到对象的自定义逻辑 //在这里编写您的模型绑定逻辑。。。 bindingContext.Result=ModelBindingResult.Success(个人); } 返回Task.CompletedTask; }