ASP.NET Core 中的模型绑定将下划线映射到标题大小写属性名称
Posted
技术标签:
【中文标题】ASP.NET Core 中的模型绑定将下划线映射到标题大小写属性名称【英文标题】:Model binding in ASP.NET Core to map underscores to title case property names 【发布时间】:2016-07-11 11:03:12 【问题描述】:我有一个模型类,我想在我的 ASP.NET MVC Core (RC2) 应用程序中绑定一个查询字符串。
我需要在查询字符串键中支持下划线以确认 OAuth 规范,但我想在我的应用程序中使用标题大小写属性名称。
我的模型类如下所示:
class OauthParameters
public string ClientId get; set;
public string ResponseType get; set;
public string RedirectUri get; set;
所以我想将client_id
、response_type
和redirect_uri
等查询字符串绑定到它。
ASP.NET MVC Core 有没有办法自动或通过属性注释来执行此操作?
我已经阅读了一些关于编写自定义模型绑定器的文章,但这些似乎 (1) 对于我想要实现的目标来说过于复杂,并且 (2) 是为 RC1 或更早版本编写的,并且其中一些语法变了。
提前致谢。
【问题讨论】:
模型活页夹不必非常复杂,它们绝对是您想要实现的目标的正确切入点 docs.asp.net/en/latest/mvc/models/model-binding.html 但是有什么问题,在数据传输对象(业务逻辑DTO)中转换的数据视图对象(控制器模型)在mvc模型投标中很常见,这种方法没有任何问题 【参考方案1】:您可以在此处使用FromQuery
属性的Name
属性。
例子:
public class OauthParameters
[FromQuery(Name = "client_id")]
public string ClientId get; set;
[FromQuery(Name = "response_type")]
public string ResponseType get; set;
[FromQuery(Name = "redirect_uri")]
public string RedirectUri get; set;
【讨论】:
完美。正是我想要的。 POST 请求是否有等价物? @dalemac 使用 [FromForm] 而不是 [FromQuery] 进行 POST 请求。 对于那些寻找 json body 解决方案的人:使用例如[JsonProperty("json_name")]【参考方案2】:.net core 2.1 和 2.2 的解决方案
或者没有属性你可以做这样的事情,我认为这更干净(当然,如果模型属性与查询参数相同)。
同时我在 .net core 2.1 和 2.2 中使用它
public async Task<IActionResult> Get([FromQuery]ReportQueryModel queryModel)
【讨论】:
以上是关于ASP.NET Core 中的模型绑定将下划线映射到标题大小写属性名称的主要内容,如果未能解决你的问题,请参考以下文章
如何有条件地将多个模型映射到 ASP.NET Core Identity 中的一个表(AspNetUsers)?
模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求
在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据