Недавно мне пришлось использовать 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;
}