Datei-Download-Problem mit dem API-Controller

public class DefaultController : Controller
{
    // GET: Default
    public ActionResult Index()
    {
        return Download();
    }

    public FileResult Download()
    {
        string xmlString = "my test xml data";
        string fileName = "test" + ".xml";
        return File(Encoding.UTF8.GetBytes(xmlString), "application/xml", fileName);
    }
}

Ich habe den obigen Code in der asp.net mvc-Anwendung, um eine Datei herunterzuladen. Es hat gut funktioniert, da mein Controller an Controller vererbt wird. Aber wenn ich diesen Code auf einen Webapi-Controller verschiebe, wird bei return @ ein Fehler ausgegebeDate. Nach der Analyse stellte ich fest, dass mein Controller in webapi an ApiController (system.web.http.api controller) vererbt. Ich fand, dass es keine Dateiklasse in ApiController gibt. Gibt es eine Möglichkeit, die Funktionalität zum Herunterladen von Dateien im webapi controller zu implementieren?

Ich habe den folgenden alternativen Code im Webapi-Controller ausprobiert, konnte jedoch keine herunterladbare Datei finden, wenn ich dies aufrufe.

public HttpResponseMessage DownloadConstructedXmlFile()
        {
            var result = new HttpResponseMessage(HttpStatusCode.OK);
            string xmlContent = "My test xml data";
            //var serializer = new XmlSerializer(typeof(xmlContent));

            var builder = new StringBuilder();
            using (var writer = new StringWriter(builder))
            {
                // serializer.Serialize(writer, xmlContent);
                result.Content = new StringContent(xmlContent, Encoding.UTF8, "application/xml");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = string.Format("test.xml")
                };
               // return result;
            }

            return new HttpResponseMessage();
        }

PS: Ich versuche, anglejs-Code zu verwenden, um diese API über angle service aufzurufen. Dies wird beim Klicken auf den Download-Button aufgerufen. Ein Beispiel für einen Winkelcode oder eine Hilfe im API-Controller-Code oder Vorschläge wären hilfreich.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage