Sitecore - 根据要求获取有关媒体项的信息

时间:2015-07-21 09:50:24

标签: c# sitecore httprequest sitecore7

我们在Sitecore解决方案中下载媒体项时遇到了问题。我们想要验证下载媒体的用户。如果用户无权访问该文件,我们需要重定向该用户/取消下载。

决定重定向的是该媒体项(具有ID的字段)上的元数据。

我们制作了一个模块:

<add type="Lib.CustomMediaRequestSessionModule, Lib" name="CustomMediaRequestSessionModule" />

代码:

public class CustomMediaRequestSessionModule : IHttpModule 
{
    public void Init(HttpApplication application)
    {
        application.BeginRequest += Application_BeginRequest;
    }

    private void Application_BeginRequest(object source, EventArgs e)
    {
        var application = (HttpApplication)source;
        var currentContext = HttpContext.Current;

        if (currentContext.Request.Url.ToString().ToLower().Contains("/~/media/"))
        {
            //Here we want to authenticate the user
        }
    }

    public void Dispose()
    {
    }
}

我们从请求中获得的唯一信息是文件的路径。 “/~/media/path/to/file.doc”。

是否有另一种方法可以从媒体项中获取更多信息?是否有更好的方法在Sitecore中执行相同的操作?

1 个答案:

答案 0 :(得分:4)

您可以使用MediaManager.ParseMediaRequest方法获取媒体项目:

MediaRequest request = MediaManager.ParseMediaRequest(HttpContext.Current.Request);

if (request == null)
{
    return false;
}

Media media = MediaManager.GetMedia(request.MediaUri);

有一篇很好的博客文章解释了如何限制Sitecore中的媒体项目Restricting access to Sitecore Media Items