Iis 7 具有文件扩展名的WCF Webapi UriTemplate可在本地工作,但不能在IIS7上工作

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

我有一个WCF WebApi Rest服务,它具有以下端点:

[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。