全球化如何设定?

2023-12-27

我陷入了 ASP.NET Web API 全球化问题。当我调用 Web API 时,我想获取特定于文化的格式的日期时间。请提供一些见解。

在我的解决方案中,首先有一个委托处理程序,其工作是设置文化。它的定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web;

namespace CultureHandling.Handlers
{
     public class CultureHandler : DelegatingHandler
     {
          protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, 
               CancellationToken cancellationToken)
          {
                  if (request != null && request.Headers != null && request.Headers.Count() > 0)
                  {
                        var reqHdrs = request.Headers.AcceptLanguage;
                        var headerValue = reqHdrs.OrderByDescending(e => e.Quality ?? 1.0D)
                                .Where(e => !e.Quality.HasValue || e.Quality.Value > 0.0D)
                                .First();


                       System.Threading.Thread.CurrentThread.CurrentUICulture = 
                       System.Globalization.CultureInfo.GetCultureInfo(headerValue.Value.ToString());
                       System.Threading.Thread.CurrentThread.CurrentCulture = 
                       System.Globalization.CultureInfo.GetCultureInfo(headerValue.Value.ToString());
                    }
                    return base.SendAsync(request, cancellationToken);
                 }
             }
        }
   }

然后,我有一个日期时间转换器定义为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace CultureHandling.Converters
{
    public class CustomDateTimeConverter : DateTimeConverterBase
    {
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return (DateTime.Parse(reader.Value.ToString()));
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteValue(((DateTime)value).ToString());
        }
    }
}

非常简单的模型类是:

public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Doj { get; set; }
    }

对应的控制器动作是:

    public class EmployeeController : ApiController
    {
        private readonly List<Employee> employees = null;
        public EmployeeController()
        {
            employees = new List<Employee>();
            employees.Add(new Employee { Id = 1, Name = "Employee1", Doj = new DateTime(2014, 7, 1)});
            employees.Add(new Employee { Id = 2, Name = "Employee2", Doj = new DateTime(2015, 7, 1)});
        }

        public List<Employee> Get()
        {
            return employees;
        }
    }

我已将 WebApiConfig.cs 配置为:

config.MapHttpAttributeRoutes();
config.MessageHandlers.Add(new CultureHandler());
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new CustomDateTimeConverter());

现在,问题部分: 理想情况下,如果我使用 Accept Language 调用 APIen-US,它应该返回日期时间值是月/日/年格式和用于fr-FR,格式为日/月/年。但是,对于这两种情况,我都以 MM/dd/yyyy 格式获取值。

根据调查,我发现 CultureHandler 能够按预期工作,这是 Postman 的屏幕截图:

The break-point in CultureHandler.cs: enter image description here

但是,令人惊讶的是,在模型绑定期间,我看到文化被更改为 en-US:

我相信这就是我没有获得日期时间值的原因日/月/年当文化为 fr-FR 时的格式:

所以,我的问题是这种文化为什么以及在哪里发生改变?我在编码中犯了任何错误吗?提前致谢!


我创建一个新的空项目,然后在解决方案中编写所有共享代码。你的代码是正确的。截图如下

我和邮递员一起尝试过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全球化如何设定? 的相关文章

随机推荐

  • 具有自定义属性的延迟作业

    我正在将延迟作业 3 0 2 与 ActiveRecord 和 Rails 3 2 3 一起使用 我有一个使用 has secure password mixin 的用户模型 因此密码仅以加密方式存储 现在我想使用延迟作业发送欢迎电子邮件
  • 使用 ThreadLocal 作为数据上下文是个好主意吗?

    使用 ThreadLocal 作为 Web 应用程序中数据的上下文是个好主意吗 这就是它的目的 但请注意删除上下文末尾的 ThreadLocal 否则可能会出现内存泄漏 或者至少会保留未使用的数据太长时间 ThreadLocals 也非常快
  • 如何使用 LinqToExcel 获取 Excel 文件的工作表名称?

    我正在使用 LinqToExcel 我希望能够获取 Excel 文件中所有工作表的名称 并将它们与 html 表单中的输入值进行比较 这样当输入值与 Excel 工作表上的任何名称不匹配时 系统会抛出异常 我该如何使用 LinqToExce
  • 调用 $(this) 内部的元素? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在元素内查找元素 https stackoverflow com questions 7386100 how to find an element within an element 我运行一个循
  • 如何获取设备的android_id? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 设备有唯一的 ID 吗 https stackoverflow com questions 2785485 is there a unique android device id 在许
  • li 浮动与显示:内联

    有没有最好的选择float left or display inline用于水平对齐列表项 eg http www vanseodesign com css simple navigation bar with css and xhtml
  • 在 gcc 和 MSVC 中以不同方式调用函数参数的析构函数

    在将一些 C 代码从 Microsoft Visual Studio 移植到 gcc 时 我遇到了一个奇怪的错误 我最终将其归结为 include
  • Apache HttpClient 响应内容长度返回 -1

    为什么下面的代码返回 1 看来请求失败了 public static void main String args DefaultHttpClient httpClient new DefaultHttpClient HttpGet http
  • SaaS - 多租户独立数据库模型在 Java 中的实现

    我正在构建一个软件项目 我想实现 SAAS 软件即服务 模型 我想设计一个与多租户兼容的 Web 应用程序 每个租户都有单独的数据库 我如何在Java环境中设计多租户UI UI本质上应该是租户可配置的 如何为每个租户单独的数据库设计数据访问
  • 如何将字符串解析为 BigDecimal? [复制]

    这个问题在这里已经有答案了 我有这个字符串 10 692 467 440 017 120 这是一个金额 我想将其解析为 BigDecimal 问题是我尝试了 DecimalFormat 和 NumbeFormat 都没有成功 Try thi
  • 是否可以将数据库加载到 RAM 中?

    我想将 MYSQL 数据库加载到我的计算机 RAM 中 有办法做到这一点吗 我在Linux下运行这个数据库 另外 如果可以的话 有没有一个好的方法来进行备份 因为如果计算机意外关闭 我将丢失所有数据 如果缓冲池足够大 那么您的数据实际上就是
  • django-cms 编辑器和 HTML 数据属性已清理

    使用 django cms 2 4 我需要创建包含引导代码的页面 但使用的 html5lib 会清理 data 属性 无论您是否在 TINYMCE DEFAULT CONFIG 中指定 valid element 我仍在为 Wymedito
  • R 4.0.0 之前安装了软件包“XXX”:请重新安装

    我正在使用 R 4 0 2 我手动安装了 2 个软件包cfcdae and Stats5303lib from here http users stat umn edu 7Egary classes 5303 software html 我
  • PHP if/else 简写符号 - 多个条件

    请考虑以下代码构造 condition code if true condition2 code if true2 code if false 这不适用于 PHP 但适用于 JavaScript 有没有办法让它在 PHP 上工作 In PH
  • 将 Airflow 日志格式化为 JSON

    我有一个要求记录阿帕奇气流 https airflow apache org 以 JSON 格式记录到 stdout Airflow 似乎并未立即提供此功能 我找到了几个能够完成此任务的 python 模块 但我无法让实现工作 目前 我正在
  • 将读取的 char 转换为 int C++

    在我的程序中 带有要读取的值 最多 2 位数字 的文件名在终端中给出 我的 main 如下所示 int main int argc char argv assume argv 1 is a filename to open ifstream
  • .NET Standard DLL 二进制文件是否与 .NET Framework 兼容?

    我目前有一个作为 NET Framework 4 6 1 构建的实用程序库 并由各种 NET Framework 应用程序引用 我现在想要创建一个新的 NET Core 应用程序 因此我想将实用程序库转换为 NET Standard 2 0
  • QQuickFramebufferObject:自定义FBO在哪里使用?这怎么会导致闪烁呢?

    我目前正在 QML 中集成自定义 OpenGL 视口QQuickFramebuffer对象 我观察到整个应用程序窗口 不仅是QQuickFramebuffer对象窗口 我想知道为什么 我的定制QQuickFramebufferObject
  • 使用 AppDelegate 进行数据操作和处理是一个好习惯吗?

    我正在制作一个对象AppDelegate并在我的程序中使用它 我已经声明了所有的setter和getter 并且还在其中插入 选择 删除 更新数据库的查询 我想问这样做是一个好的做法吗 如果是 那么如何 如果不是 那么为什么这不是一个好的做
  • 全球化如何设定?

    我陷入了 ASP NET Web API 全球化问题 当我调用 Web API 时 我想获取特定于文化的格式的日期时间 请提供一些见解 在我的解决方案中 首先有一个委托处理程序 其工作是设置文化 它的定义如下 using System us