如何从 BindingContext 读取未命名对象
how to read un-named object from BindingContext
我需要实现自定义模型绑定,因此尝试为 .Net Core 2.1 API
应用程序实现 IModelBinder
。
Model
class -
[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
...
}
我用于测试的 Postman 请求在 body
中有 JSON
对象,最简单的形式如下所示 -
{
"name": "name1"
"address": "address1"
}
请注意,此请求来自我无法控制的现有旧版客户端,JSON
对象将作为主体出现在 POST
中,将没有名称。
在 QuickWatch
在 VisualStudio
我也看到 bindingContext.ValueProvider.Count is 1
和 bindingContext.ModelMetadata
有 Parameter
of person
和 Type
Person
和 bindingContext.FieldName
的 person
。令人惊讶的是 bindingProvider.Result
是 Failed
而 bindingContext.ModelName
总是 String.Empty
谁能帮我从 BindingContext
得到 ModelName
。如果在这种情况下无法获得 ModelName
那么我如何从 BindingContext
中读取 Person
对象?
我找到了阅读 posted 参数的最佳方法,由于我没有得到对这个问题的任何答复,我将 post 我是如何做到的,如果它有帮助的话给其他人
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;
}
我需要实现自定义模型绑定,因此尝试为 .Net Core 2.1 API
应用程序实现 IModelBinder
。
Model
class -
[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
...
}
我用于测试的 Postman 请求在 body
中有 JSON
对象,最简单的形式如下所示 -
{
"name": "name1"
"address": "address1"
}
请注意,此请求来自我无法控制的现有旧版客户端,JSON
对象将作为主体出现在 POST
中,将没有名称。
在 QuickWatch
在 VisualStudio
我也看到 bindingContext.ValueProvider.Count is 1
和 bindingContext.ModelMetadata
有 Parameter
of person
和 Type
Person
和 bindingContext.FieldName
的 person
。令人惊讶的是 bindingProvider.Result
是 Failed
而 bindingContext.ModelName
总是 String.Empty
谁能帮我从 BindingContext
得到 ModelName
。如果在这种情况下无法获得 ModelName
那么我如何从 BindingContext
中读取 Person
对象?
我找到了阅读 posted 参数的最佳方法,由于我没有得到对这个问题的任何答复,我将 post 我是如何做到的,如果它有帮助的话给其他人
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;
}