WebAPI是否可以仅为特定路由提供静态图像文件?

时间:2014-05-23 10:01:01

标签: asp.net asp.net-mvc-4 iis asp.net-web-api

我有一个ASP.Net MVC 4.5 WebAPI控制器(IIS8),可以从存储库提供静态图像文件。我想要使​​用的URL就像;

 http://example.com/blob/image/123412341324.jpg

问题是'.jpg'在这里似乎是通过静态文件处理程序,这在很大程度上是我想要保留的。我不希望所有静态文件通过ASP.Net只通过此URL路径上的文件。

有没有什么方法可以配置ASP.Net来提供没有runAllManagedModulesForAllRequests的这些文件而不修改网址,例如删除文件扩展名?理想情况下,IIS路由机制查看文件夹路径/blob/image/;

 http://example.com/blob/image/123412341324.jpg -- route through ASP.Net WebAPI

 http://example.com/staticimages/123412341324.jpg    -- do not route through ASP.Net
 http://example.com/anywherelese/123412341324.jpg    -- do not route through ASP.Net

我知道我可以写一个单独的'IHttpHandler',但如果可能的话我想通过MVC WebAPI控制器进行路由。

1 个答案:

答案 0 :(得分:1)

事实证明,使用处理程序映射非常容易。我尝试了一些通配符,但虽然*.jpeg工作blob/image/*.jpeg没有。最后,在post的帮助下,我在我的应用程序的web.config中提出了以下条目,它完成了我需要的操作并路由了对该控制器的所有请求;

<system.webServer>
    <handlers>
...
        <add name="my-blob-jpeg-ExtensionlessUrlHandler-Integrated-4.0" path="blob/image" verb="GET,HEAD,POST,DEBUG,DELETE,PUT,PATCH" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
...
    </handlers>
</system.webServer>

它不是特定于图像文件,但我不打算沿着该路径放置任何其他静态内容,所以我很好。