在HTTP下载请求标头中设置接受

时间:2011-09-08 09:39:20

标签: wcf wcf-web-api

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

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

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

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

2 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:2)

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