【问题标题】:How to read the content from a C# HttpResponseMessage in javascript?如何从 javascript 中的 C# HttpResponseMessage 读取内容?
【发布时间】:2021-10-16 02:15:31
【问题描述】:

我有一个名为 csv 的字符串,字面意思就是这样,例如“姓名、姓氏、年龄、身高等” 然后我像这样将它发送到后端..

var csv = exportRequests.GetCSV();
            var filename = string.Format("{0}-{1}-{2:yyyy-MM-dd_hh-mm-ss-tt}.csv", "Request", requestStatus.ToUpperInvariant(), DateTime.Now);              

            var stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(csv);
            writer.Flush();

            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ByteArrayContent(stream.GetBuffer())
            };
            result.Content.Headers.ContentDisposition =
                new ContentDispositionHeaderValue("attachment")
                {
                    FileName = filename
                };
            result.Content.Headers.ContentType =
                new MediaTypeHeaderValue("text/csv");
          
            //var test = new FileDetailViewModel();
            //test.Name = filename;
            //test.Rows = csv;

            return Ok(result);

然后我在后端读取它,但实际内容在哪里?当然,字节应该在某个地方。 content 属性只有标题。这发生在使用 $.ajax 进行调用的旧系统上。

谢谢

【问题讨论】:

  • 请编辑您的问题并添加您的代码段(不是代码段的屏幕截图)。
  • js上的结果需要是截图才能看到结果,但是我上面c#已经粘贴了。
  • 您是使用 Postman 之类的工具检查您的 API 还是只是从 url 请求数据?在那里你可以找到它是否向服务器发送了一些东西。这实际上必须是您的第一步。

标签: javascript c# asp.net-mvc csv export-to-csv


【解决方案1】:

我认为在 JavaScript 中无法通过 HttpResponseMessage 读取内容。您只能下载内容。

public HttpResponseMessage GetCsv()
{
     var csv = exportRequests.GetCSV();
     var filename = string.Format("{0}-{1}-{2:yyyy-MM-dd_hh-mm-ss-tt}.csv", "Request", requestStatus.ToUpperInvariant(), DateTime.Now);              

     var stream = new MemoryStream();
     StreamWriter writer = new StreamWriter(stream);
     writer.Write(csv);
     writer.Flush();

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

下载脚本

window.open('/api/controller/GetCsv', '_blank', '');

如果要显示csv的内容可以使用以下代码

[HttpPost]
public String GetCsv()
{
    return exportRequests.GetCSV();
}

脚本

$('#btngetcsv').click(function() {
  $.ajax({
    url: "/api/controller/GetCsv",
    data: {},
    type: "Post",
    dataType: "Json",
    success: function(result) {
      var arr = csvToArray(result);
      for (var i = 0; i < arr.length; i++) {
        var name = arr[i].name;
        var lastname = arr[i].lastname;
        //etc...........
      }
    },
    error: function() {
    }
  });
});

function csvToArray(str, delimiter = ",") {
  // slice from start of text to the first \n index
  // use split to create an array from string by delimiter
  const headers = str.slice(0, str.indexOf("\n")).split(delimiter);

  // slice from \n index + 1 to the end of the text
  // use split to create an array of each csv value row
  const rows = str.slice(str.indexOf("\n") + 1).split("\n");

  // Map the rows
  // split values from each row into an array
  // use headers.reduce to create an object
  // object properties derived from headers:values
  // the object passed as an element of the array
  const arr = rows.map(function(row) {
    const values = row.split(delimiter);
    const el = headers.reduce(function(object, header, index) {
      object[header] = values[index];
      return object;
    }, {});
    return el;
  });

  // return the array
  return arr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多