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_idresponse_typeredirect_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 中的模型绑定

如何有条件地将多个模型映射到 ASP.NET Core Identity 中的一个表(AspNetUsers)?

ASP.NET Core 中的模型绑定

模型绑定不适用于 ASP.NET Core 2 WebAPI 中的 POST 请求

在 ASP.NET MVC Core 2 中使用 MetadataPropertyHandling 模型绑定 JSON 数据

理解ASP.NET Core