簡體   English   中英

Configure.Net Core 3 web API 始終解析具有不變文化的數字

[英]Configure .Net Core 3 web API to always parse numbers with invariant Culture

我不知道標題是否有意義,但簡而言之,我們需要解析作為字符串傳遞的雙精度數。 但我們無法控制數字的格式(例如句點與逗號小數分隔符)

因此,我們需要使用 Invariant Culture 和 Number Styles 來解析某些文本字段,如下所示:

double.TryParse(ResponseObject.Ammount, 
                NumberStyles.Any, 
                CultureInfo.InvariantCulture, 
                out double amt);

問題是,很難在任何地方強制使用這種重載方法。 所以我希望你可以在 Startup.cs 中配置不變文化的使用,但是我真的不知道該怎么做。

啟動中的配置:

private void ConfigureLocalization(IServiceCollection services)
        {
            var jsonLocalizationOptions = Configuration.GetSection(nameof(JsonLocalizationOptions));

            _jsonLocalizationOptions = jsonLocalizationOptions.Get<JsonLocalizationOptions>();
            _defaultRequestCulture = new RequestCulture(_jsonLocalizationOptions.DefaultCulture,
                _jsonLocalizationOptions.DefaultUICulture);
            _supportedCultures = _jsonLocalizationOptions.SupportedCultureInfos.ToList();

            services.AddJsonLocalization(options =>
            {
                options.ResourcesPath = _jsonLocalizationOptions.ResourcesPath;
                options.UseBaseName = _jsonLocalizationOptions.UseBaseName;
                options.CacheDuration = _jsonLocalizationOptions.CacheDuration;
                options.SupportedCultureInfos = _jsonLocalizationOptions.SupportedCultureInfos;
                options.FileEncoding = _jsonLocalizationOptions.FileEncoding;
                options.IsAbsolutePath = _jsonLocalizationOptions.IsAbsolutePath;
            });
        }

(關於這個項目我不能多說,但我們只是說我們必須解析某些包含雙精度值的字符串等。我們在這里做的事情沒有辦法,只能直截了當)。

所以無論如何,如果我們無法在啟動時配置它,這就是解決方案。

    public static class ParseUtil
    {
        public static decimal ParseDecimal(string input)
        {
            return decimal.TryParse(input,
                                 NumberStyles.Any,
                                 CultureInfo.InvariantCulture,
                                 out decimal amt) ? amt : 0;
        }

        public static double ParseDouble(string input)
        {
            return double.TryParse(input,
                                 NumberStyles.Any,
                                 CultureInfo.InvariantCulture,
                                 out double amt) ? amt : 0;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM