【问题标题】:Bind from any request input: FromQuery, FromRoute, FromForm从任何请求输入绑定:FromQuery、FromRoute、FromForm
【发布时间】:2017-09-26 13:56:41
【问题描述】:

在 ASP.NET Core 中,我需要将 ViewModel 成员数据绑定到传入的请求数据。我不在乎它是来自表单帖子、查询字符串还是路由参数。

似乎每个来源都有新的属性,但没有一个可以处理所有这些。

[FromQuery(Name="xyz")] // Works only with query string
[FromForm(Name="xyz")] // Works only with form data
[FromRoute(Name="xyz")] // Works only with route data
public string Something {get; set;}

有没有办法支持所有这些?

【问题讨论】:

  • 如果你没有添加这些属性,DefaultModelBinder 不会处理这个吗?它将在表单值、路由值和查询字符串中查找Something按此顺序。 (Microsoft docs)
  • 是的,但如果参数名称与属性名称相同。但是,如果您需要绑定不同的参数名称并且仍然可以从您所说的默认行为中受益,那么显然现在没有办法,这是一种耻辱。

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


【解决方案1】:

很遗憾,没有。声明是明确的。您必须选择从查询字符串、请求正文或 URL 中获取它。

【讨论】:

  • 谢谢克里斯。我想知道如果你指定所有这些属性会发生什么?!
  • 老实说,不确定。没试过。一般来说,如果您正确设计路线,则几乎不需要允许多个。例如,POST 应该几乎总是使用FromBodyFromFormFromQuery 完全不合适。而对于 GET,没有请求正文,因此任何数据都必然需要FromQueryFromRoute,根据我的经验,是多余的。如果参数是在路由中定义的,不管你是否用FromRoute 属性装饰它,它都会在正确的位置结束。
猜你喜欢
  • 2016-12-08
  • 2021-12-24
  • 2019-03-16
  • 1970-01-01
  • 2019-09-21
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多