簡體   English   中英

此平台不支持操作 - dot net core 2 中的 RSACryptoServiceProvider 存在問題

[英]operation is not supported on this platform - problem with RSACryptoServiceProvider in dot net core 2

最近我不得不在 dot net core 2.2 中使用 RSACryptoServiceProvider。

我的 GetSign() 方法中的 RSA.FromXmlString() 有問題。 當我從 UnitTest 調用我的 Action 時一切正常,但是當我通過 Post 方法從 PostMan 調用它時,我在rsa.FromXmlString("XXX")上得到以下錯誤:

此平台不支持操作

我的單元測試:

[Fact]
        public void TestToken()
        {
            var contoller2 = new BankPaymentController();
            contoller2.GetToken();
       }



//My controller
    [EnableCors("CorsPolicy")]
    [HTTPPOST]
    public IActionResult GetToken()
    {
        BankingInputParam model2 = new BankingInputParam();
           var token = PasargadBank.CallPaymentMethod(model2);
            return Ok(token);
    }

這是我調用內部控制器的內部方法

        //This is CallPaymentMethod
    public static string CallPaymentMethod(BankingInputParam model)
    {
        PasargadBank pasargadbank = new PasargadBank();
        var sendingData = pasargadbank.CreateTextArrayInput(model);
        var content = new StringContent(sendingData, Encoding.UTF8, "application/json");
        var request = new HttpRequestMessage
        {
            RequestUri = new Uri("XXXXXXXXXX"),
            Method = HttpMethod.Post,
            Content = content
        };
        MyClass instancemyclass = new MyClass();
        var aaa = instancemyclass.GetSign(sendingData);

        request.Headers.Add("Sign", pasargadbank.GetSign(sendingData));
        var client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var response = client.SendAsync(request).Result;// requestMessage).Result;
        return Encoding.UTF8.GetString(response.Content.ReadAsByteArrayAsync().Result);
    }

這是我有問題的 GetSignt() 方法

public string GetSign(string data) 
{
 var cs = new CspParameters {
  KeyContainerName = "PaymentTest"
 };
 var rsa = new RSACryptoServiceProvider(cs) {
  PersistKeyInCsp = false
 };

 rsa.Clear();
 rsa = new RSACryptoServiceProvider();

 byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new SHA1CryptoServiceProvider());
 string sign = Convert.ToBase64String(signMain);
 return sign;
}

FromXmlString直到.NET Core 3.0才在 .NET Core 中完全實現。 由於 .NET Core 2.2 不受支持,您應該更新到 .NET Core 3.1 並且它應該可以工作。

暫無
暫無

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

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