Ich schreibe ein Nuget-Paket, das eine REST-API verbraucht, die ich geschrieben habe. Ich habe einige Schwierigkeiten, es mit RestSharp asynchron aufzurufen.Async-Web-API-Aktion, die vorzeitig zurückkehrt
Ich habe folgende Controller-Methode:
[HttpGet("{id}")]
public async Task<IActionResult> GetFeatureByIdAsync(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
ModelState.AddModelError("id-Null", "The id parameter cannot be null.");
return BadRequest(ModelState);
}
var feature = await _director.GetFeatureById(id);
if (feature == null)
return NotFound();
var model = new ViewModel<Feature>(feature);
return Ok(model);
}
ich die Folgeklassenbibliothek in einer separaten Lösung habe:
public async Task<bool> IsSwitchEnabledAsync(string name)
{
string fullyFormedUrl = $"{_url}/{name}";
var client = new RestClient(fullyFormedUrl) { Encoding = Encoding.UTF8 };
var request = new RestRequest(Method.GET) { RequestFormat = DataFormat.Json };
var result = await client.ExecuteTaskAsync<FeatureViewModel>(request);
var message = $"Response: {result.StatusCode}, {result.ResponseStatus}, " +
$"\n\nError: {result.ErrorException}, {result.ErrorMessage} " +
$"\n\nData: {result.Content}";
Debug.WriteLine(message);
return result.Data != null;
}
Ich habe folgenden Grund Sandbox Integrationstest:
[TestFixture]
public class Sandbox
{
private FeatureSwitch _sut;
[OneTimeSetUp]
public void Setup()
{
const string machineName = "localhost";
const int port = 5000;
_sut = new FeatureSwitch(machineName, port);
}
[Test]
public async Task ShouldReturnTrue()
{
var result = await _sut.IsSwitchEnabledAsync("Release_US501_AddUser");
result.Should().BeTrue();
}
}
Ich bin auf der Suche nach ein wenig Aufklärung über den besten Ansatz, wie man die API nennt korrekt? Wie mein Sandbox-Code mit einem Internal Server 500 Error fehlschlägt. Dies liegt daran, dass die API-Methode darauf wartet, dass der verschachtelte Async-Aufruf abgeschlossen wird. Die ursprüngliche Anfrage kehrt also zum Sandbox-Code zurück, bevor der verschachtelte API-Aufruf abgeschlossen werden kann.
Der Sandbox-Testcode muss warten, bis die API ein Ergebnis zurückgibt. Im Moment macht es das nicht.
Also, was ist der richtige Ansatz hier?
UPDATE:Mein Problem war auf falsche Verwendung einer Mongo-Bibliothek-Methode.
'Dies liegt daran, dass die API-Methode darauf wartet, dass der verschachtelte Async-Aufruf abgeschlossen wird. - Nein, die Antwort wird erst gesendet, wenn die Async-Methode abgeschlossen ist. Es gibt noch etwas, das den Fehler 500 verursacht. –
Ein '500' * typischerweise * bedeutet, dass eine Ausnahme ausgelöst und nicht behandelt wird. Haben Sie die Ausnahme in der Web-API debugged (vorausgesetzt, es gibt eine Ausnahme)? –
Danke Chaps - lass mich weiter drüber nachdenken. – IbrarMumtaz