[英]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.