繁体   English   中英

GET 和 POST 的 Asp.Net 文化不同

[英]Asp.Net cultures differ for GET and POST

我将 Asp.Net Core 应用程序的文化设置为德语,如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
    var supportedCultures = new[] { new CultureInfo("de-DE") };

    app.UseRequestLocalization(new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture("de-DE"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
    });

    ...
}

当我用 Postman 发送一个值时,这完美地工作并且一切都被正确解析。 例如,如果我发送一个像 0,76 这样的值,它会被完美地解析为 0.76。 但是,当我向 API 端点发出 GET 请求时,它返回值 0.76。 当然,这不是德国文化,并且在我的 API 中显示出一些不一致。 向我的 API 发送和接收数据的开发人员应该始终具有相同的格式,这应该是德国文化。

这是默认行为还是应该是相同的格式?

编辑:

下面的屏幕截图显示了对于 GET 请求,小数点分隔符仍然是一个点而不是逗号。 但是,当我使用 post 请求发送数据时,数据的格式正确地使用逗号作为小数点分隔符而不是点。

在此处输入图片说明

这里: https : //forums.asp.net/t/2119989.aspx?JSON+formatter+and+Localization+settings

它不是有效的 json...

"netValue": 120,00,
"grossValueAdded": 147,60,

有效的 json

"netValue": 120.00,
"grossValueAdded": 147.60,

您可以如何将所有小数转换为字符串,并使用字符串操作(不推荐)只是停留

"netValue": "120,00",
"grossValueAdded": "147,60",

我想出了为什么它的行为是这样的。 首先,这是我的模型的样子:

public class someDTO
{
    public int Id { get; set; }
    public int AuftragId { get; set; }
    public string Typ { get; set; }
    public decimal KundeBrutto { get; set; }
    public decimal KundeNetto { get; set; }
    public decimal KundeMwSt { get; set; }
    public decimal FahrerBrutto { get; set; }
    public decimal FahrerNetto { get; set; }
    public decimal FahrerMwSt { get; set; }
    public decimal MwStSatz { get; set; } = (decimal)0.19;
    public string MwStLand { get; set; } = "DE";
    public string FileName { get; set; }
    public string FileUrl { get; set; }
}

很明显,其中一些属性是decimal类型的。 如果我从 GET 返回数据,Asp.Net 将发送回带有数据的 JSON。 正如 Seabizkit 所提到的,decimal 类型的属性总是用点分隔,因为它是内置类型。 因此,文化将无关紧要。

然而,我想知道,为什么我必须发送带有德国文化的数据。 根据我的应用程序要求,我需要发送一个文件以及该数据,因此我们选择发出form-data类型的请求。 表单数据的缺点是您发送的所有内容都是字符串类型,并且没有数据类型。 当 Asp.Net 看到一个字符串时,它会尝试将该值从字符串映射到十进制。 执行此操作时,它假定发送的字符串采用应用于服务器的区域性格式。 例如,在我的情况下,我在服务器上将文化设置为德语,因此像“47,11”这样的值将正确映射到 47.11。

但是,如果您决定将 JSON 类型的数据发送到您的正文中,您当然可以将这些属性设置为十进制类型,因此您可以将它们用点分隔发送。 因此,您将克服在不同文化中发送/接收数据的问题:

在此处输入图片说明

我希望这是有道理的!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM