在特定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存储中获取的。存储在项目文件夹中。这可能就是问题所在
路径元素似乎是一个掩码,你试过了吗:
<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;
}
}