Ho bisogno di ottenere un file csv dal controller web api. Non riesco a visualizzare la finestra di dialogo "Salva con nome". Viene visualizzato solo l'output di testo sulla pagina. Ho provato entrambi, chiamando Esporta dal jquery e anche pianura vecchio htmlWeb API restituisce file csv
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;
}
EDIT: aggiunto questa linea:
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" };
ancora non funziona
I chiamalo così:
<a id="export" href="/Relay/Billing/Export" class="btn btn-primary">Export</a>
.210
e anche provato in questo modo:
$("#export").click(function() {
$.post("/Relay/Billing/Export", { type: $("#discountType").val() })
.done(function (data) {
});
});
Ancora nessuna casella Salva
possibile duplicato di [Come impostare il download del nome del file nell'API Web MVC di ASP.NET] (http://stackoverflow.com/questions/12145390/how-to-set-downloading-file-name-in-asp- net-mvc-web-api) – CodeCaster
Sono un po 'confuso. Un tipico * web-api * o * restful-services * restituisce JSON (o qualche tipo di serializzazione). Presumo che il tuo consumatore non sia un browser web? –
Prova ad aggiungere questa riga prima di restituire il risultato: 'result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue (" attachment ") {FileName =" some.csv "};' – lbrahim