Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Umbraco从url获取媒体_C#_Url_Media_Umbraco - Fatal编程技术网

C# Umbraco从url获取媒体

C# Umbraco从url获取媒体,c#,url,media,umbraco,C#,Url,Media,Umbraco,我想用genericHandler.ashx保护我的媒体。我有一个重写规则/media to/handlers/my handler.ashx?media url=xxx.jpg,但在umbraco api中找不到从url获取节点ID的函数 目前,我使用以下sql查询: public static Int32 GetNodeIdFromUrl(String url) { SqlParameter[] sqParams = { new SqlParameter("@url", ur

我想用genericHandler.ashx保护我的媒体。我有一个重写规则/media to/handlers/my handler.ashx?media url=xxx.jpg,但在umbraco api中找不到从url获取节点ID的函数

目前,我使用以下sql查询:

public static Int32 GetNodeIdFromUrl(String url)
{
        SqlParameter[] sqParams = { new SqlParameter("@url", url) };
        string sql = "select contentNodeId from cmsPropertyData where dataNvarchar =     @url";
        int id = -1;
        try
        {

           id = (int)SqlHelper.ExecuteScalar(umbraco.GlobalSettings.DbDSN,CommandType.Text,sql,sqParams);
        }
        catch (Exception ex)
        {
            umbraco.BusinessLogic.Log.Add(
                umbraco.BusinessLogic.LogTypes.Error, 
                new umbraco.BusinessLogic.User(0), 0,
                "Error from download security handler ->" + ex.Message.ToString());
        }

        return id;
    }
灵感来自


您知道有哪个umbraco api函数可以执行此操作吗?

我认为,如果您知道url的正确格式,可以使用正则表达式或拆分url来获取媒体id

如果设置了重定向以将/media中的任何内容映射到/handlers/my-handler.ashx,那么原始URL请求的格式将为/media/{mediaID}/{fileName}.{extension}。 介质ID是磁盘上/media目录中文件夹的名称。当您收到一个传入请求时,只需在“/media/”之后和下一个“/”之前将所有内容子串

嗯,


Benjamin

不,url中没有mediaId/media/1042/xxx.jpg提供了一个cmsPropertyData.idies,然后您可以从url获取属性id 1042。通过获取属性id,您可以获取媒体项。@mahesh如何使用umbraco API从属性id中获取媒体项?@marapet:使用umbraco.library.GetMedia(media id)获取媒体项,或者您可以使用媒体m=新媒体(Convert.ToInt32(ImageID));如果(m!=null&&m.getProperty(“umbracoFile”)!=null){imagePath=m.getProperty(“umbracoFile”).Value.ToString();}否,则url内没有mediaId/media/1042/xxx.jpg提供了一个cmsPropertyData.Id。不是吗?Yohann,Umbraco的工作方式是将任何内容存储在/Media文件夹下的媒体库中,并使用子文件夹表示媒体项的ID,格式为/Media/{mediaID}/{myfilename}.{myextension}。如果您正在重定向请求(以Regex格式为UrlRewriting.Net-^/media/(.*)+$),那么您的处理程序将收到类似于/1042/xxx.jpg的信息。您需要URL的“1042”部分。@codegecko这不正确-正如OP正确指出的,1042是
cmsprropertydata
表的id。