在特定URL上触发HttpHandler

本文关键字:HttpHandler URL | 更新日期: 2023-09-27 18:16:01

我已经做了一个HttpHandler,我想在浏览器从特定URL请求某些东西时运行。

我试着像这样注册:

<system.webServer>
  <handlers>
    <clear />
      <add name="png" verb="GET,HEAD" path="*.png" type="MyProject.HttpHandler" />
      <add name="jpg" verb="GET,HEAD" path="*.jpg" type="MyProject.HttpHandler" />
      <add name="jpeg" verb="GET,HEAD" path="*.jpeg" type="MyProject.HttpHandler" />
      <add name="gif" verb="GET,HEAD" path="*.gif" type="MyProject.HttpHandler" />
  </handlers>
<system.webServer>

这适用于所有的url,除了那些我需要它的工作。我想处理的请求是当浏览器请求图像时。它看起来像这样:

http://example.net/contentassets/some_image_name.jpg?maybe=someParameters

由于某种原因,HttpHandler没有拾取这些。基本上,我想在http://example.net/contentassets/...的请求上使用HttpHandler(以便它们仅在contentassets位于URL中时触发)。有人知道怎么做吗?

编辑:处理程序是否忽略查询字符串?

EDIT2:我们使用EPiServer作为CMS,因此图像是从EPiServer blob存储中获取的。存储在项目文件夹中。这可能就是问题所在

在特定URL上触发HttpHandler

路径元素似乎是一个掩码,你试过了吗:

<add name="png" verb="GET,HEAD" path="*/contentassets/*.png" type="MyProject.HttpHandler" />

我明白了。EPiServer有自己的处理程序来服务IContent,例如来自BLOB存储的图像。可以为特定的IContent类型创建自己的处理程序,覆盖episerver的默认实现。

这是ContentMediaHttpHandler的实现,但设置为仅在IContentImage(图像)上触发。

[TemplateDescriptor(Inherited = true, TemplateTypeCategory = TemplateTypeCategories.HttpHandler)]
public class ImageResizeHandler : BlobHttpHandler, IRenderTemplate<IContentImage>
{
    protected override Blob GetBlob(HttpContextBase httpContext)
    {
       //This the implementation from ContentMediaHttpHandler
       var downLoadFileName = httpContext.Request.RequestContext.GetCustomRouteData<string>(DownloadMediaRouter.DownloadSegment);
       if (!string.IsNullOrEmpty(downLoadFileName))
       {
           httpContext.Response.AppendHeader("Content-Disposition", string.Format("attachment; filename='"{0}'"", downLoadFileName));
       }
       var routeHelper = ServiceLocator.Current.GetInstance<ContentRouteHelper>();
       var binaryStorable = routeHelper.Content as IBinaryStorable;
       return binaryStorable != null ? binaryStorable.BinaryData : null;
    }
}