我正在尝试重定向到媒体 url,但使用代码攻击会导致完整的 url 由媒体的大小连接起来。
因此,例如 url 返回 /media/123/example.pdfpdf4000
XPathNodeIterator xName = umbraco.library.GetMedia(Convert.ToInt32(pdfid), false);
string url = xName.Current.Value;
Response.Redirect("~/"+ url);
怎么了?
我只是在寻找如何做到这一点,umbraco 现在包含 uQuery 以更轻松地获取这样的数据,因此您可以使用以下方法回答您的问题:
Media pdf = umbraco.uQuery.GetMedia(pdfId);
Response.Redirect(pdf.GetProperty<string>("umbracoFile"));
请注意:如果它是图像媒体项目(而不是文件),那就更容易了:
Media img = umbraco.uQuery.GetMedia(imgId);
imgTag.ImageUrl = img.GetImageUrl();
不知道为什么 uQuery 不包含GetFileUrl()
但GetProperty<string>()
似乎比自己使用 xpath 迭代器更好。
There is a solution explained here and also here. But, in essence you can create a method as below to fix the issue:
public string getImage(int ImageID)
{
XPathNodeIterator xn = umbraco.library.GetMedia(ImageID, false);
xn.MoveNext();
XPathNodeIterator xn2 = xn.Current.Select("data[@alias='umbracoFile']");
xn2.MoveNext();
return xn2.Current.Value;
}
要获取媒体文件 URL,很简单
new Media(mediaId).getProperty("umbracoFile").Value.ToString()