【问题标题】:Why is Input Model null in asp.net core action为什么在 asp.net 核心操作中输入模型为空
【发布时间】:2020-02-02 10:57:04
【问题描述】:

我正在向我的 API 提交订单。

通常,它工作正常。但有时,inputModel 为空。

为什么会发生这种情况?

public async Task<Order> NewAsync(OrderInput input)

【问题讨论】:

  • 这种情况偶尔发生在我身上,所以我最终决定在这里发布一些东西,以便我可以再次查找它,因为我总是忘记。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

当 InputModel 与传递给它的实际参数不匹配时,控制器中的输入模型将为 null。

明确一点:控制器不关心是否传递了其他参数,它会简单地忽略它们。

但是如果有“必填”的参数,比如:

public int TypeId{get;set;}

如果没有提供这个,那么整个输入模型将为空。

如果 TypeId 确实是可选的,则使其可为空,然后输入模型将其设置为空。

public int? TypeId{get;set;} 

总而言之:控制器已为 InputModel 传递了一个 null 值,而 InputModel 不允许为 null。结果是整个 inputModel 在处理时会为空。

这可能令人沮丧,因为没有抛出异常,你得到的只是一个空模型。

修复方法是将浏览器中的post参数与Model进行比较,找出哪些参数不应该为null。这种情况发生在我身上的次数比我愿意承认的要多得多,而且每次我都必须停下来重新弄清楚这一点,所以我想我会继续在这里发布这个以提醒自己下次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 2021-02-14
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2016-11-27
    • 2020-02-27
    • 2021-12-14
    相关资源
    最近更新 更多