Net Core dapper 和 postgres jsonb 专栏
Net core dapper and postgres jsonb column
我想 POST 一些自定义 JSON 通过邮递员使用以下请求到我的 postgres jsonb 列。
自定义部分在“设置”>“数据”节点中发送。我不想将自定义部件应用到我只想发送任何类型 json 并存储它的模型。
{
"name": "Test",
"settings": {
"data": {
"customdata": "hello",
"custommore": "bye"
}
}
}
“数据”节点被建模 - 像这样:
public string Data { get; set; } //I have tried JSONDocument and Jsonb types to no avail.
Postman 错误:
"errors": {
"$.settings.data": [
"The JSON value could not be converted to System.String. Path: $.settings.data | LineNumber: 3 | BytePositionInLine: 17."
]
}
请求甚至没有命中我的控制器方法。我认为这是因为 customdata 和 custommore 没有映射到模型。
是否可以发送自定义 JSON 未固定到任何类型模型的数据 - 或者它必须是模型的一部分?
我正在努力寻找与 EF 核心无关的任何内容,这不是我正在使用的。
可以用custom model binding,从HttpContext.Request.Body
得到json数据,再用sonConvert.DeserializeObject
得到jsonobject.You即可将数据设置为您想要的格式。
这是一个演示:
数据绑定器:
public class DataBinder:IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var model1 = new Customer();
using (var reader = new StreamReader(bindingContext.HttpContext.Request.Body))
{
var body = reader.ReadToEndAsync();
var mydata = JsonConvert.DeserializeObject<JObject>(body.Result);
model1.Name = mydata["name"].ToString();
model1.Settings = new Settings
{
Data = mydata["settings"]["data"].ToString()
};
}
bindingContext.Result = ModelBindingResult.Success(model1);
return Task.CompletedTask;
}
}
控制器:
public IActionResult TestCustomModelBinding([ModelBinder(BinderType = typeof(DataBinder))]Customer customer) {
return Ok();
}
结果:
我想 POST 一些自定义 JSON 通过邮递员使用以下请求到我的 postgres jsonb 列。
自定义部分在“设置”>“数据”节点中发送。我不想将自定义部件应用到我只想发送任何类型 json 并存储它的模型。
{
"name": "Test",
"settings": {
"data": {
"customdata": "hello",
"custommore": "bye"
}
}
}
“数据”节点被建模 - 像这样:
public string Data { get; set; } //I have tried JSONDocument and Jsonb types to no avail.
Postman 错误:
"errors": {
"$.settings.data": [
"The JSON value could not be converted to System.String. Path: $.settings.data | LineNumber: 3 | BytePositionInLine: 17."
]
}
请求甚至没有命中我的控制器方法。我认为这是因为 customdata 和 custommore 没有映射到模型。
是否可以发送自定义 JSON 未固定到任何类型模型的数据 - 或者它必须是模型的一部分?
我正在努力寻找与 EF 核心无关的任何内容,这不是我正在使用的。
可以用custom model binding,从HttpContext.Request.Body
得到json数据,再用sonConvert.DeserializeObject
得到jsonobject.You即可将数据设置为您想要的格式。
这是一个演示:
数据绑定器:
public class DataBinder:IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
var model1 = new Customer();
using (var reader = new StreamReader(bindingContext.HttpContext.Request.Body))
{
var body = reader.ReadToEndAsync();
var mydata = JsonConvert.DeserializeObject<JObject>(body.Result);
model1.Name = mydata["name"].ToString();
model1.Settings = new Settings
{
Data = mydata["settings"]["data"].ToString()
};
}
bindingContext.Result = ModelBindingResult.Success(model1);
return Task.CompletedTask;
}
}
控制器:
public IActionResult TestCustomModelBinding([ModelBinder(BinderType = typeof(DataBinder))]Customer customer) {
return Ok();
}
结果: