使用AngularJS的Httphandler下载PDF文档

时间:2015-04-07 13:32:39

标签: angularjs cross-domain httphandler ashx

我开发了一个httpHandler来完成我使用angularJS的PDF下载。它工作正常,直到我将服务部分移动到不同的域。当我将服务部分移动到与我的UI AngularJS应用程序不同的域时,它开始给出以下错误。

  

XMLHttpRequest无法加载http://localhost:57072/DocumentHandler.ashx?Caller=1&token=1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:54470”访问。响应的HTTP状态代码为500。

这是我的HttpHandler方法。

  public void ProcessRequest(HttpContext context)
        {

            response.Clear();
            response.ClearContent();
            response.ClearHeaders();
            response.AddHeader("Access-Control-Allow-Origin", "*");
            response.AppendHeader("Access-Control-Allow-Methods", "OPTIONS,POST,GET");
            response.AppendHeader("Access-Control-Allow-Headers", "X-File-Name,X-File-Type,X-File-Size");

            response.ContentType = MIMEType.Get(filExtension);
            response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);

            using (FileStream stream = this.Open(filesDirectory + fileName))
            {
                byte[] buffer = new byte[10240];
                int count = 0;

                while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    response.OutputStream.Write(buffer, 0, count);
                    response.Flush();
                }
            }
        }

任何人都可以告诉我这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

这是一个CORS问题。您必须对服务器进行配置以启用跨源资源共享。这可以在服务器上的Web.config中完成。 CORS在WebAPI 2.2中可用,你应该看看将HttpHandler功能移植到一个返回HttpResponseMessage的web api控制器。