【问题标题】:Can WebAPI serve static image files for only certain routes?WebAPI 可以只为某些路由提供静态图像文件吗?
【发布时间】:2023-04-02 15:36:01
【问题描述】:

我有一个 ASP.Net MVC 4.5 WebAPI 控制器 (IIS8),它可以提供来自存储库的静态图像文件。我想使用的网址是这样的;

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

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

有什么方法可以配置 ASP.Net 以在不使用 runAllManagedModulesForAllRequests 且不修改 url(例如删除文件扩展名)的情况下提供这些文件?理想情况下,一个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 控制器对其进行路由。

【问题讨论】:

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


    【解决方案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>
    

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

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 2019-05-07
      • 2017-08-16
      • 2020-08-03
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多