операция не поддерживается на этой платформе - проблема с RSACryptoServiceProvider в dot net core 2 - PullRequest
0 голосов
/ 28 марта 2020

Недавно мне пришлось использовать RSACryptoServiceProvider в точке net core 2.2.

что-то не так с RSA.FromXmlString () внутри моего метода GetSign (). Когда я вызываю свой Action из UnitTest, все в порядке, но когда я вызываю его из PostMan через Post Method, я получаю ниже Ошибка на 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;
}

1 Ответ

1 голос
/ 28 марта 2020

FromXmlString не был полностью реализован в. NET Core до . NET Core 3.0 . Поскольку. NET Core 2.2 больше не поддерживается, следует обновить его до. NET Core 3.1, и он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...