Ich möchte einen API-Aufruf über Attribut vor einer Route Ausführung ausführen. Ich habe einen Kundenaktionsfilter erstellt und die OnExecuting() - Überschreibungsfunktion verwendet..NET MVC Async-Task in Attribut vor Route ausführen
Innerhalb der Funktion erwarte ich einen asynchronen API-Aufruf an einen anderen Server. Während des Debuggens merke ich jedoch, dass die Route ausgeführt wird, bevor der Async-Aufruf abgeschlossen ist. Wie kann ich das erreichen?
[CustomAttribute("Stuff")]
[Route("MyRoute")]
public async Task<IHttpActionResult> MyRoute()
{
await anotherAsyncFunction();
return Ok();
}
Und die Definition des benutzerdefinierten Aktionsfilters.
public class CustomAttribute : ActionFilterAttribute
{
private string att;
public CustomAttribute(string a)
{
att = a;
}
public async override void OnActionExecuting(HttpActionContext actionContext)
{
await MyFirstAsyncFunction();
}
}
Leider wird dies nicht beendet, bevor der Routencode ausgeführt wird.
Huch. Sie blockieren einen Anruf basierend auf einem anderen Dienst? Ich würde vorschlagen, diese Route zu vermeiden und sie in die Warteschlange zu stellen und stattdessen nach einer Flagge zu suchen. Du gehst einen rutschigen Abhang entlang. - Kommentar beiseite, Sie müssen die API synchron aufrufen. –
wartet nicht, um es synchrone zu machen? – Tyler
Am besten schauen Sie sich einen ['AsyncHelper'] (http://stackoverflow.com/a/25097498/298053) an und wickeln Sie Ihren Anruf ein. –