【问题标题】:Accept Matrix Header in Asp.net Core API在 Asp.net Core API 中接受矩阵头
【发布时间】:2022-01-06 16:15:36
【问题描述】:

我正在尝试将矩阵数组作为参数传递给 API,看来我没有以正确的方式传递参数。

[HttpPost(Name = "Post")]
public IActionResult Post([FromBody]int[,] matrixValues)
{
}

我将参数作为请求体从 swagger UI 传递

[
  {1,0,1,1,1},{1,0,0,0,0 },{1,0,0,0,1},{0,0,1,0,0},{0,1,0,0,0},{1,1,0,0,1}
]

它正在抛出

System.NotSupportedException: The type 'System.Int32[,]' is not supported.

.Net 核心 API 中有什么方法可以接受矩阵头吗?

【问题讨论】:

  • 忘掉招摇,每一秒都在抱怨。

标签: c# matrix asp.net-core-webapi


【解决方案1】:

Model Binding 不支持此类数据,您可以使用自定义 Model Binding。

自定义模型绑定

public class CustomMB : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
                throw new ArgumentNullException(nameof(bindingContext));

            var modelName = bindingContext.ModelName;   

            var values = bindingContext.ValueProvider.GetValue(modelName);
            if (values.Length == 0)
                return Task.CompletedTask;

            var a  = (string)values;
            var b = "[" + a + "]";

             //add nuget package `Newtonsoft.Json`
            var result=JsonConvert.DeserializeObject<int[,]>(b);

            bindingContext.Result = ModelBindingResult.Success(result);
            return Task.CompletedTask;
        }
    }

那么你可以看到当我在 swagger 中添加矩阵数组时,action 可以接收到值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2021-04-13
    • 1970-01-01
    • 2018-02-13
    • 2019-12-16
    • 2017-04-11
    • 2022-08-16
    相关资源
    最近更新 更多