Iis 7 具有文件扩展名的WCF Webapi UriTemplate可在本地工作,但不能在IIS7上工作
我有一个WCF WebApi Rest服务,它具有以下端点:Iis 7 具有文件扩展名的WCF Webapi UriTemplate可在本地工作,但不能在IIS7上工作,iis-7,wcf-web-api,Iis 7,Wcf Web Api,我有一个WCF WebApi Rest服务,它具有以下端点: [WebGet(UriTemplate=“{id}”)] 及 [WebGet(UriTemplate=“{id}.pdf”)] 第一个端点返回JSON,第二个端点返回pdf。这两个端点都在我的本地环境中工作,但是pdf端点在运行IIS7的服务器上返回一个404 是否需要某种设置IIS7才能执行路由?您可能需要将.pdf添加到IIS中的MIME类型中 尝试添加文件扩展名.PDF和应用程序/八位字节流类型 更新 要直接使用itext
[WebGet(UriTemplate=“{id}”)]
及
[WebGet(UriTemplate=“{id}.pdf”)]
第一个端点返回JSON,第二个端点返回pdf。这两个端点都在我的本地环境中工作,但是pdf端点在运行IIS7的服务器上返回一个404
是否需要某种设置IIS7才能执行路由?您可能需要将.pdf添加到IIS中的MIME类型中 尝试添加文件扩展名.PDF和应用程序/八位字节流类型 更新 要直接使用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();
}
我找到了这个问题的解决办法。这是一个简单的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>
此mime类型已设置-我认为问题与IIS试图提供静态文件而不是路由请求有关。是的,你可能是对的。您是否可以将路由更改为不使用扩展并在路径中传递参数,如[WebGet(UriTemplate=“{id}/pdf”)]
?我实际上正在尝试实现此解决方案(),以便直接链接到动态生成的pdf(例如:Invoice).我做过类似的事情,我创建了一个函数,将动态生成的PDF作为服务器响应返回,以便直接打开或下载。我已经修改了上面的答案来展示这个函数的一个例子。谢谢你的更新。生成pdf对我来说不是问题-它实际上在本地工作,并返回一个漂亮的pdf:)当我在服务器上发出相同的请求时,问题就出现了,它没有执行路由,而是返回404。