http://www.codeproject.com/Articles/820146/HTTP-Partial-Content-In-ASP-NET-Web-API-VideoTunnel Web API Video-Stream Antwort durch MVC Aktion
Über den Link oben ich eine Web-API-Aufruf erstellt, die ein Video und spielen ohne Probleme zurück, wenn ich die Web-api direkt aufrufen. In der Produktion wird der Web-API-Aufruf hinter einer Firewall und nicht direkt für die Öffentlichkeit zugänglich sein. Und aus Gründen, die viel zu lang sind, kann ich der öffentlich zugänglichen Website keinen Web-API-Dienst hinzufügen.
Ich möchte den Anruf zu einem Video durch eine MVC-Aktion tunneln und das genaue Ergebnis vom Web-API-Controller an den Benutzer zurückgeben. Web API gibt eine HttpResponseMessage zurück, also habe ich den unten stehenden Code verwendet und dachte mir, dass ich die Antwort einfach tunneln kann, aber es scheint überhaupt nicht zu funktionieren.
public HttpResponseMessage Play(string fileName)
{
using (var client = new HttpClient())
{
var userName = Impersonation.Instance.CurrentImpersonatedUser;
var url = string.Format("{0}/api/Player/Play?f={1}",
this.pluginSettings["VirtualVideoTrainingServiceURL"],
fileName);
var result = client.GetAsync(url).Result;
return result;
}
}
Wenn ich an den Aufruf der MVC-Aktion mache, bekomme ich das einfach im Browser. Result Ich denke, es ist die Serialisierung der Daten in irgendeiner Weise, aber ich bin nicht in der Lage, diese Theorie zu beweisen oder zu widerlegen. Muss ich die Antwort vom Webservice analysieren und sie dann in ein Dateiergebnis konvertieren? Jede Hilfe wäre willkommen!
Für ein normales Modell sind Sie korrekt, aber dies wird einen Pipe-Stream einer Datei zurückgeben, so dass ich JSON vermeiden muss. Die MVC-Aktion wird im src-Attribut eines Video-HTML-Elements verwendet. –
Warum nicht einen Controller hinzufügen, der von ApiController und der Pipe die Ausgabe an Ihre Kunden ableitet? @RodneyPannell –
Schwer zu erklären, warum ich WebAPI-Controller nicht zur öffentlichen Website hinzufügen kann, aber ApiController kann nicht auf der öffentlich zugänglichen Seite verwendet werden. Es ist keine "normale" MVC-Site. Wir verwenden normalerweise RestSharp, um Web API hinter der Dateiwand zu kontaktieren, aber dies ist ein komplett anderes Szenario als das Ziehen eines Modells aus einer Datenbank. –