首页 > 解决方案 > 具有多个名称的 FromHeader 属性

问题描述

我想将具有多个名称的 FromHeader 属性(例如,用于多语言支持)用于同一模型。

public async Task<IActionResult> Create([FromHeader(Name="Test-NLD"),FromHeader(Name="Test-ENG")] string Test)

您不能将多个 FromHeader 属性与另一个名称用于同一模型(错误 CS0579,重复“FromHeader”属性)。

解决此问题的最佳方法是什么?我使用 Swagger,所以如果 Swagger 文档仍然正确,那就太好了。

标签: c#.net.net-core

解决方案


在短期内,您需要为您的操作设置两个不同的参数,一个绑定到每个可能的 Header 键。

public async Task<IActionResult> Create(
    [FromHeader(Name="Test-NLD")] string testNld,
    [FromHeader(Name="Test-ENG")] string testEng)

FromHeader不接受单个参数或通配符上的多个条目。

目前,如果您只支持 2 种语言,您可能可以通过此解决方案勉强应付。可以理解,这是非常需要维护的,也是“技术债务”的定义。


当 Header Keys 是静态的时,ASP.Net 和 Swagger 都可以发挥最佳作用。无法记录“您需要提供一个名为 的标题Test-*,其中*是 'NLD' 或 'ENG'。”

以后我还是很推荐大家把语言的选择拆分成自己的key。您甚至可以使用“标准” Accept-Language标头。

public async Task<IActionResult> Create(
    [FromHeader(Name="Accept-Language")] string clientLanguages,
    [FromHeader(Name="Test")] string test)

Accept-Languages 的编写是为了让客户按优先顺序为您提供他们想要的语言的 CSV。您选择您支持的第一个,并使用 Content-Language 响应标头通知客户端选择。

还有更优雅的方法来获取 Accept-Language 标头,请参阅这篇文章


推荐阅读