如何访问当前URL或_layouts文件夹中的文件?
题
我的代码背后的代码来自ASPX网页使用 transform.xsl 进行一些自定义XSLT转换。
方案1: :尝试从_layouts文件夹获取文件。
SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"/layouts/MyFeature/transform.xsl");
注意:该URL上可以使用该文件 http:// mysite:8080/_layouts/myfeature/transform.xsl 使用浏览器时。
方案2: :尝试从当前(http:// mysite:8080/myFeature/mypage.aspx)URL获取文件。
SPWeb web = SPContext.Current.Web;
SPFile file = web.GetFile(@"transform.xsl");
或者
SPFile file = web.GetFile(@"MyFeature/transform.xsl");
或者
SPFile file = web.GetFile(@"/MyFeature/transform.xsl");
所有场景都失败了,如何解决这个问题?
解决方案
“ transform.xsl”现在位于“ myFeature/transform.xsl”上,我已经跟随Anders Rask的提示,现在我的代码看起来像这样:
SPWeb web = SPContext.Current.Web;
XslCompiledTransform transformer = new XslCompiledTransform();
XsltSettings settings = new XsltSettings(true, true);
string xslLocation = web.Url + "/FormWrapper/transform.xsl";
transformer.Load(xslLocation, settings, GetResolverWithDefaultCredentials());
// Do XSLT transform...
解决方案
我很确定spweb.getfile()返回您的网站页面,例如default.aspx。另外,如果您的XSLT文件位于_layouts文件夹中,则不是SPFILE。
而是尝试类似于下面代码的内容(注意样板代码,因此应添加错误处理等)
// fetch xsl processor
XslCompiledTransform processor = GetXslt(@"/layouts/MyFeature/transform.xsl");
StringWriter writer = new StringWriter(CultureInfo.CurrentCulture);
// Transform XSLT code here
private static XslCompiledTransform GetXslt(string xsltUrl)
{
XslCompiledTransform processor = new XslCompiledTransform(false);
bool enableDocumentFunctions = true;
bool enableScript = true;
XsltSettings settings = new XsltSettings(enableDocumentFunctions, enableScript);
// add error handling here
processor.Load(xsltUrl, settings, GetResolverWithDefaultCredentials());
return processor;
}
// use resolver to avoid getting security exceptions
private static XmlUrlResolver GetResolverWithDefaultCredentials()
{
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
return resolver;
}
其他提示
您可以编写一个模块功能,该功能将您的transform.xsl“上传”到文档库(例如样式库)中,该功能使您可以访问该文件作为SPFile。