我有一个具有以下端点的 WCF WebApi Rest 服务:
[WebGet(UriTemplate = "{id}")]
和
[WebGet(UriTemplate = "{id}.pdf")]
第一个端点返回 JSON,第二个端点返回 pdf。这两个端点都在我的本地环境中工作,但 pdf 端点404
在运行 IIS7 的服务器上返回 a。
为了执行路由,是否需要某种设置 IIS7?
我有一个具有以下端点的 WCF WebApi Rest 服务:
[WebGet(UriTemplate = "{id}")]
和
[WebGet(UriTemplate = "{id}.pdf")]
第一个端点返回 JSON,第二个端点返回 pdf。这两个端点都在我的本地环境中工作,但 pdf 端点404
在运行 IIS7 的服务器上返回 a。
为了执行路由,是否需要某种设置 IIS7?
我找到了解决这个问题的方法。这是一个简单的 web.config 添加:
<system.webServer>
<handlers>
<add name="PDFHandler-Integrated-4.0" path="*.pdf" verb="GET" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
</system.webServer>
您可能需要将 .pdf 添加到 IIS 中的 MIME TYPE
尝试使用 application/octet-stream 类型添加文件扩展名 .PDF
http://technet.microsoft.com/en-us/library/cc725608%28v=ws.10%29.aspx
更新
要使用 itextsharp 之类的方法直接返回动态生成的 PDF:
[WebGet(UriTemplate = "GetPDF/{id}")]
public void GetPDF(int id)
{
Invoice i = InvoiceData.GetInvoiceByID(id);
MyApp.Data.Export.PDF pdf = new MyApp.Data.Export.PDF();
byte[] data = pdf.generatePDFBytes(id);
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=\"" + i.InvoiceNumber + ".pdf" + "\"");
Response.ContentType = "application/pdf";
Response.BinaryWrite(data.ToArray());
Response.End();
}