SItecore 8.1图像使用MediaRequestHandler中的哈希调整大小

时间:2017-04-25 16:07:24

标签: c# image resize sitecore

我遇到了sitecore 8.1中调整大小图片的问题。我在网上看了很多文章但是找不到我想要的东西,可能是我想到的不是正确的方法,但猜猜我还在这里发帖,希望有人可以指导我。

我们有基于WebApi的项目,我们实际上没有基于Json请求和响应的布局。看起来像这样

回复

"components": [
        {
          "type": "background",
          "parallax": 0,
          "data": {
            "type": "image",
            "value": "-/media/images/pages/home/section-2.jpg"
          }
        },

此Json响应正在缓存,因此不希望在此阶段返回散列图像。因此,当返回图像src传递到图像元素时,系统将检测设备类型并将其传递给查询字符串,如下所示

"-/media/images/pages/home/section-2.jpg?type=mobile"

基于查询字符串中的类型定义。 我正在从sitecore项加载调整大小图像的宽度和高度值。所有这一切都发生在MediaRequestHandler类和&下面的DoProcessRequest方法示例

    public class MediaRequestHandler : Sitecore.Resources.Media.MediaRequestHandler
    {

    protected override bool DoProcessRequest(HttpContext context, MediaRequest request,
                Sitecore.Resources.Media.Media media)
            {
//Load sitecore item based on the type define in querystring

    if (!string.IsNullOrEmpty(context.Request.QueryString["type"]))
                {

var mediaItemHashedUrl = Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl(
                           Sitecore.Resources.Media.MediaManager.GetMediaUrl(
                               media.MediaData.MediaItem,
                               new MediaUrlOptions()
                               {
                                   Language = Context.Language,
                                   Width = 100, // Width val would be coming from siteore item
                                   Height = 75 // Height val is also coming from siteore item
                               }));

                  }

              }
     return base.DoProcessRequest(context, request, media);
    }

现在的问题是如何在没有传递额外请求的情况下加载此散列图像?

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您可以在request.options中传递高度和宽度,如下所示。我自己没试过。但是,这应该有用。

public class MediaRequestHandler : Sitecore.Resources.Media.MediaRequestHandler
{
    protected override bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.MediaRequest request,
                Sitecore.Resources.Media.Media media)
    {    
        if (!string.IsNullOrEmpty(context.Request.QueryString["type"]))
        {
            request.Options.Height = 120;//desired height here
            request.Options.Width = 180;//desired width here
        }

        return base.DoProcessRequest(context, request, media);
    }
}