3

我有一个返回发票的 WCF Web Api 端点:http://localhost/api/invoice/23

它返回的格式是请求中接受头的格式。如果 Javascript 需要 JSON 或 XML,那么它只需在接受标头中设置它。这就是 WCF Web Api 的工作方式。我已经在发票中添加了一个 PDF 格式化程序,以便在请求应用程序/pdf 时,它会以适当的 MIME 类型返回一个呈现的 pdf 文件流。这工作正常,我可以在提琴手测试它。

我需要用户在浏览器中单击某些内容以开始 PDF 下载并弹出打开/保存对话框。我不知道如何执行此操作并设置请求的接受标头。javascript 中的静态链接或 window.location 不起作用,因为它不允许我设置标题。AJAX 请求不起作用,因为虽然我可以设置标题,但它需要返回文本,并且不会在浏览器中显示为下载。

我不确定我该怎么做。任何建议将不胜感激。

4

2 回答 2

3

您可以在 JavaScript 中动态创建一个表单并要求它在新选项卡中开始。那应该给你你想要的。

function SubmitRequest() 
{
        var myForm = document.createElement("form");
        myForm.method = "post";
        myForm.action = "url here"
        var myInput = document.createElement("input");
        myInput.setAttribute("name", "json");
        myForm.setAttribute("target", "_blank");
        myInput.setAttribute("value", "Your value here");
        myForm.appendChild(myInput);
        document.body.appendChild(myForm);
        myForm.submit();
        document.body.removeChild(myForm);
    }
于 2011-09-08T11:35:49.143 回答
2

最简单的方法是在页面中添加一个带有链接的 A 标记,http://localhost/api/invoice/23.pdf然后使用格式化程序上的 AddUriPathExtensionMapping 让它从 URI 上的路径扩展名自动生成接受标头。

于 2011-09-08T11:46:10.343 回答