【问题标题】:ASP.Core bind to byte[] doesn't workASP.Core 绑定到 byte[] 不起作用
【发布时间】:2018-01-01 02:20:58
【问题描述】:

我将此查询发送到 ASP.Core 控制器操作(我添加了换行符以提高可读性):

GET http://localhost:5000/Files/AddFileConfirmed?generatedId=90
                                                &generatedId=73
                                                &generatedId=25
                                                &generatedId=199
                                                &generatedId=69
                                                &generatedId=245
                                                &generatedId=238
                                                &generatedId=83
                                                &generatedId=164
                                                &generatedId=208
                                                &generatedId=156
                                                &generatedId=83

如果操作接受int[],则generatedId 绑定正确,但如果byte[] 绑定失败。数组应该是字节数组而不是整数数组。

[HttpGet]
public string AddFileConfirmed(int[] generatedId)
{
    return $"ID = {(generatedId == null? "Null" : String.Join(", ", generatedId))}";
}

为什么我不能绑定到字节数组?

【问题讨论】:

  • 可能没有可以处理字节数组的默认模型绑定器。先检查一下。好消息是该框架足够灵活,您可以创建自己的活页夹来处理它。您还应该考虑使用有助于解决问题的适当参数属性。
  • 干杯@Nkosi,可能是缺少声音的活页夹。 “正确的参数属性”是什么意思?
  • 在核心中,与以前的版本相反,您必须明确告诉操作在哪里查找数据以绑定模型。 Customize model binding behavior with attributes
  • @Nkosi 来自链接的有趣引用:"T[]:除了 byte[] 类型的数组,绑定将 T[] 类型的参数设置为 Array.Empty (). byte[] 类型的数组设置为 null。”
  • 如果我是你,我也会问自己:使用byte[] 代替int[] 有什么好处?

标签: c# asp.net-core


【解决方案1】:

为什么我不能绑定到字节数组?

正如此处How model binding works 所述,以下摘录显示了您收到 null 的原因。

当一个参数被绑定时,模型绑定停止寻找值 该名称并继续绑定下一个参数。否则,该 默认模型绑定行为将参数设置为其默认值 取决于他们的类型:

T[]:除了byte[] 类型的数组之外,绑定会将T[] 类型的参数设置为Array.Empty<T>()byte[] 类型的数组设置为 null

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2012-04-15
    • 2010-12-08
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多