【问题标题】:ASP net core: Configure response serialization culture per controller and/or actionASP 网络核心:为每个控制器和/或操作配置响应序列化文化
【发布时间】:2020-04-15 15:25:18
【问题描述】:

我有一个包含多个控制器的应用程序,这些控制器用于不同的场景。这意味着不同的控制器需要不同的策略来确定用于响应的正确文化。确定文化的不同方法的一些示例(在伪 C# 代码中)

  • user.culture ??接受语言
  • 接受语言 ?? setting.GetCustomValue(controllerXCulture)
  • 接受语言

RequestCultureProvider 只接收HttpContext,所以我缺少ControllerActionContext,以便能够确定选择策略。或者有人知道如何获得吗?

添加中间件来设置线程文化也不起作用。它会在执行动作的过程中设置所需的文化,但是当响应被序列化时,标准的RequestCultureProviders确定的原始文化会被恢复,从而导致响应文化不正确。

有谁知道设置响应文化或如何为每个控制器配置自定义 RequestCultureProvider 的方法?

[编辑]
我试图找到解决方法,想,也许我可以在将所需的文化存储在HttpContext.Items 后的某个时间点设置它,但我找不到设置它的好点。我甚至创建了一个从NewtonsoftJsonOutputFormatter 派生的自定义输出格式化程序,但它没有被调用,即使我首先在Startup.ConfigureServices 中清除了其他格式化程序。我设置文化的任何其他地方都没有导致在序列化过程中正确设置文化。
[/编辑]

【问题讨论】:

  • 你可以参考这个:medium.com/swlh/…
  • @YongqingYu 那篇文章没有帮助。它没有解释每个动作或控制器的不同文化选择策略,它为整个应用程序定义了一个单一的策略。我已经看过那篇文章了。

标签: c# asp.net-core localization


【解决方案1】:

使用大量不同的谷歌搜索变体,我最终进入了这个页面:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-3.1#using-middleware-in-the-filter-pipeline

这不是最理想的解决方案,因为我需要为不同的行为创建多个类,但至少它允许我为每个控制器/动作创建自定义本地化选项。

这似乎是目前最好的解决方案,尽管我希望可能有一个更优雅的解决方案。至少这不会让人觉得 hacky。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2019-01-17
    相关资源
    最近更新 更多