Lan*_*eyo 2 c# asp.net asp.net-web-api angularjs asp.net-web-api2
我有一些旧的Web API操作方法,它返回CSV文件.它工作了很长时间,但最近停止了.现在它导致ERR_SPDY_PROTOCOL_ERROR.
Chrome中的ERR_SPDY_PROTOCOL_ERROR通常与此处所述的Avast安全性相关联.在我的情况下,它不是由Avast引起的,其他Web浏览器也会抛出异常.
我的动作方法如下:
[HttpGet]
[Route("csv")]
public HttpResponseMessage SomeMethod([FromUri]SomeSearchCriteria sc)
{
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
string content = someLogic.SomeSearchmethod(sc);
writer.Write(content);
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;
}
}
Run Code Online (Sandbox Code Playgroud)
通过简单地改变window.location按钮点击,角度前端调用该方法.
整个行动方法正确执行,没有例外.错误仅由Web浏览器显示.
描述在Chrome冲洗插座在这里不解决问题.
我在API控制器中尝试过这种方法并通过chrome浏览器进行调用,它会抛出 net::ERR_CONNECTION_RESET
在回复中有一些问题StreamContent,ByteArrayContent在结果内容中使用 ,它完美地运行.
[HttpGet]
[Route("csv")]
public HttpResponseMessage SomeMethod([FromUri]SomeSearchCriteria sc)
{
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream, Encoding.UTF8);
string content = "test";
writer.Write(content);
writer.Flush();
stream.Position = 0;
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
//result.Content = new StreamContent(stream);
result.Content = new ByteArrayContent(stream.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" };
return result;
}
}
Run Code Online (Sandbox Code Playgroud)