В веб-API ASP.NET Core я использую API С SOAP XML.
Сначала все работало, но внезапно я получил эту ошибку:
Код: Выделить всё
"System.Net.Http.HttpRequestException: Response status code does not indicate success: 500 (Internal Server Error).\r\n at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()\r\n at RequestHandler.SendSoapWebRequest(String url, String action, String xmlString) in C:\\WebRequestHandlers\\RequestHandler.cs:line 64\r\n at Implementations.ChequeBooksServices.GetQueryChequeBookAsync(QueryChequeBookRequestDto chequeBookDto) in C:\\ChequeBooksServices.cs:line 135",
Код: Выделить всё
using (var response = await _httpClient.SendAsync(request))
program.cs:
Код: Выделить всё
var builder = WebApplication.CreateBuilder(args);
ConfigurationManager configuration = builder.Configuration;
var environment = builder.Environment;
// Add services to the container.
builder.Services.AddHttpClient("Checkbook")
.ConfigurePrimaryHttpMessageHandler(() =>
{
// Allowing Untrusted SSL Certificates
var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
//handler.SslProtocols.
handler.ServerCertificateCustomValidationCallback =
(httpRequestMessage, cert, cetChain, policyErrors) => true;
return handler;
});
Код: Выделить всё
"ChequeBooksEndpoints": {
"chequeBookBaseUrl": "https://myapi.com:1232/SchooAppService/SchoolAppService",
}
Код: Выделить всё
public class RequestHandler : IRequestHandler
{
private readonly ILogger _logger;
private readonly HttpClient _httpClient;
private readonly IHttpClientFactory _httpClientFactory;
private readonly AsyncRetryPolicy _retryPolicy;
public RequestHandler(
ILogger logger,
HttpClient httpClient,
IHttpClientFactory httpClientFactory
)
{
_logger = logger;
this._httpClient = httpClientFactory.CreateClient("Checkbook");
// Apply the HttpClientHandler to the HttpClient
_httpClient.Timeout = TimeSpan.FromMinutes(5); // Set timeout to 5 minutes
_httpClient.DefaultRequestHeaders.ConnectionClose = true; // Disable connection close after each request
_httpClient.DefaultRequestHeaders.Accept.Clear(); // Clear default Accept header
_httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml")); // Set Accept header
}
public async Task SendSoapWebRequest(string url, string action, string xmlString)
{
try
{
// Set headers and content
var request = new HttpRequestMessage(HttpMethod.Post, url) { Version = new Version(2, 0) };
request.Headers.Add("SOAPAction", action);
request.Content = new StringContent(xmlString, Encoding.UTF8, "text/xml");
// Send the request and get the response
using (var response = await _httpClient.SendAsync(request))
{
// Ensure the request was successful before reading the content
response.EnsureSuccessStatusCode();
// Read the content of the response
return await response.Content.ReadAsStringAsync();
}
}
catch (HttpRequestException httpEx)
{
_logger.LogError($"HttpRequestException while sending SOAP request to {url}. Error: {httpEx}");
throw;
}
catch (OperationCanceledException cancelEx) when (cancelEx.CancellationToken.IsCancellationRequested)
{
_logger.LogError($"The SOAP request to {url} timed out. Error: {cancelEx}");
throw;
}
catch (OperationCanceledException cancelEx)
{
_logger.LogError($"The SOAP request to {url} was canceled. Error: {cancelEx}");
throw new TimeoutException("The SOAP request timed out.", cancelEx);
}
catch (Exception exc)
{
_logger.LogError($"An error occurred while sending SOAP request to {url}. Error: {exc}");
throw new InvalidOperationException("Unable to post soap object.", exc);
}
}
}
Источник: https://stackoverflow.com/questions/781 ... ternal-ser