如何从 javascript 中的 C# HttpResponseMessage 读取内容?
Posted
技术标签:
【中文标题】如何从 javascript 中的 C# HttpResponseMessage 读取内容?【英文标题】:How to read the content from a C# HttpResponseMessage in javascript? 【发布时间】: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 请求数据?在那里你可以找到它是否向服务器发送了一些东西。这实际上必须是您的第一步。 【参考方案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;
【讨论】:
以上是关于如何从 javascript 中的 C# HttpResponseMessage 读取内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“no-cors”将 JavaScript HTTP 发布请求代码更改为 C#?
如何从 C# 中的 TCP 数据包中获取 Http 正文消息