从ASP.NET操作返回文件时的ERR_SPDY_PROTOCOL_ERROR

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冲洗插座在这里不解决问题.

Jig*_*iya 6

我在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)