c# - 具有多个名称的 FromHeader 属性
问题描述
我想将具有多个名称的 FromHeader 属性(例如,用于多语言支持)用于同一模型。
public async Task<IActionResult> Create([FromHeader(Name="Test-NLD"),FromHeader(Name="Test-ENG")] string Test)
您不能将多个 FromHeader 属性与另一个名称用于同一模型(错误 CS0579,重复“FromHeader”属性)。
解决此问题的最佳方法是什么?我使用 Swagger,所以如果 Swagger 文档仍然正确,那就太好了。
解决方案
在短期内,您需要为您的操作设置两个不同的参数,一个绑定到每个可能的 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 标头,请参阅这篇文章。
推荐阅读
- python-3.x - 有没有办法使用 crontab 来安排 python 脚本(脚本使用 Google API 来读取 google 表格)?
- python - 根据特定列比较数据集中的行以找到最小值/最大值
- conan - 柯南用户权限被拒绝
- android - 如何使用控制器 ListView Flutter
- c# - 无法在没有可空警告的情况下安全地检测空值
- java - 使用 WebSphere DynaCache 时如何解决这个问题?com.ibm.ws.cache.DistributedMapImpl 与 com.ibm.websphere.cache.DistributedMap 不兼容
- python - 根据组在一个单元格中组合多行
- maven - brew 安装在 mac 上,但是 brew install maven 不工作
- javascript - 无法获取其他 IP 和端口 Gamedig discord.js v12
- android - 如何根据文件扩展名在移动设备上打开默认应用程序?