aliyun-openapi-net-sdk icon indicating copy to clipboard operation
aliyun-openapi-net-sdk copied to clipboard

InvariantGlobalization=true 时调用发送短信会产生异常

Open dashiell-zhang opened this issue 2 years ago • 2 comments

<Project Sdk="Microsoft.NET.Sdk.Web">
	<PropertyGroup>
		<TargetFramework>net8.0</TargetFramework>

		<GenerateDocumentationFile>True</GenerateDocumentationFile>
		<DebugType>embedded</DebugType>
		<Nullable>enable</Nullable>
		<ImplicitUsings>enable</ImplicitUsings>
//开启这个属性
		<InvariantGlobalization>true</InvariantGlobalization>
		<UserSecretsId>742f0bcb-df8d-442a-8b51-772aa0ed6c69</UserSecretsId>
		<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
	</PropertyGroup>
</Project>
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Common;
using Microsoft.Extensions.Options;
using SMS.AliCloud.Models;

namespace SMS.AliCloud
{
    public class AliCloudSMS(IOptionsMonitor<SMSSetting> config) : ISMS
    {


        private readonly string accessKeyId = config.CurrentValue.AccessKeyId;


        private readonly string accessKeySecret = config.CurrentValue.AccessKeySecret;

        public bool SendSMS(string signName, string phone, string templateCode, Dictionary<string, string> templateParams)
        {
            try
            {
                string templateParamsJson = JsonHelper.ObjectToJson(templateParams);

                IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
                DefaultAcsClient client = new(profile);
                CommonRequest request = new()
                {
                    Method = MethodType.POST,
                    Domain = "dysmsapi.aliyuncs.com"
                };
                request.AddQueryParameters("PhoneNumbers", phone);
                request.AddQueryParameters("SignName", signName);
                request.AddQueryParameters("TemplateCode", templateCode);
                request.AddQueryParameters("TemplateParam", templateParamsJson);
                request.Version = "2017-05-25";
                request.Action = "SendSms";

//这里会产生异常
                CommonResponse response = client.GetCommonResponse(request);

                string retValue = System.Text.Encoding.Default.GetString(response.HttpResponse.Content);

                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

你好,由于 .NET 8 创建的项目默认 InvariantGlobalization 是 True 在调用阿里云的 SDK 进行短信发送时会产生 bug,必须手动修改这个值为 false 才能使用。

和这个应该属于同类型的问题 https://github.com/aliyun/aliyun-openapi-net-sdk/issues/399

dashiell-zhang avatar Dec 11 '23 14:12 dashiell-zhang

请问有没有报错的 stack。

JacksonTian avatar Dec 11 '23 14:12 JacksonTian

@JacksonTian 晚上好, image

Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name') en is an invalid culture identifier.

dashiell-zhang avatar Dec 14 '23 10:12 dashiell-zhang