Web-API-Rückgabe csv-Datei

Ich brauche, um eine csv-Datei aus der web-api-controller. Ich kann nicht "Speichern unter" - dialog zu zeigen. Nur-text-Ausgabe zeigt sich auf der Seite. Ich habe versucht beide, den Aufruf Export von jquery und auch plain old html

Controller:

[System.Web.Http.HttpGet]
public HttpResponseMessage Export()
{
    StringBuilder sb = new StringBuilder();
    IEnumerable<CustomerDiscount> list = this.subscriberRepository.GetSubscribers();

    foreach (CustomerDiscount item in list)
    {
        sb.AppendFormat(
            "{0};{1};{2};",
            item.CustomerName,
            item.CustomerNumber,
            Environment.NewLine);
    }

    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(sb.ToString());
    writer.Flush();
    stream.Position = 0;

    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType =
        new MediaTypeHeaderValue("text/csv");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" };
    return result;
}

BEARBEITEN:
Hinzugefügt dieser Zeile:

result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" };

immer noch nicht funktioniert

Ich nenne es so:

<a id="export" href="/Relay/Billing/Export" class="btn btn-primary">Export</a>

und auch versucht es so:

$("#export").click(function () {
    $.post("/Relay/Billing/Export", { type: $("#discountType").val() })
      .done(function (data) {
      });
});

Immer noch kein Speichern Als " - box

  • möglich, Duplikat der Wie zu setzen herunterladen der Datei-name in ASP.NET MVC-Web-API
  • Ich bin ein wenig verwirrt. Eine typische web-api oder restful-services-JSON zurückgeben (oder irgendeine Art von Serialisierung). Ich nehme an, Ihr Verbraucher ist nicht ein web-browser?
  • Versuchen Sie diese Zeile vor der Rückkehr Ergebnis: result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "some.csv" };
  • Wenn Sie wollen, um eine Methode aufzurufen, die gibt eine CSV-Datei, die Sie werden viel besser mit ein standard-MVC-controller. Web-API verwendet wird, für die Rückgabe von Daten (in der Regel) wo Sie als Controller den Inhalt zurückgeben. Ich würde sagen, eine CSV-Datei (vor allem die Art und Weise Ihre Berufung ist es) ist der Inhalt nicht Daten.
InformationsquelleAutor ShaneKm | 2015-04-29
Schreibe einen Kommentar