当浏览器请求来自特定网址的内容时,我创建了一个HttpHandler
。
我尝试这样注册:
<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>
这适用于所有网址,除了我需要它处理的网址。我想要处理的请求是浏览器请求图像的时间。它看起来像这样:
http://example.net/contentassets/some_image_name.jpg?maybe=someParameters
由于某种原因,HttpHandler
并没有接受这些。
基本上我想对HttpHandler
的请求使用http://example.net/contentassets/...
(这样它们只有在contentassets
在URL中时才会触发)。有谁知道怎么做?
编辑:处理程序是否忽略查询字符串?
EDIT2:我们使用EPiServer作为CMS,因此从EPiServer blob存储中获取图像。存储位于项目文件夹中。这可能是问题所在。
答案 0 :(得分:0)
路径元素似乎是一个掩码,你尝试过:
<add name="png" verb="GET,HEAD" path="*/contentassets/*.png" type="MyProject.HttpHandler" />
答案 1 :(得分:0)
所以,我明白了。 EPiServer有自己的处理程序来提供IContent
,例如来自BLOB存储的图像。可以为特定的IContent
类型创建自己的处理程序,从而覆盖EPiServers的默认实现。
以下是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;
}
}