SharePointのXDocument.loadで不正になりました
-
10-12-2019 - |
質問
私のドキュメントライブラリからXMLファイルを開こうとしています。私は私が存在するファイルの「昇格特権」としていくつかのコードを実行しています。
書き留めコードはこれです:
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite sito = new SPSite("SITE URL"))
{
using (SPWeb web = sito.OpenWeb())
{
SPList lista = web.Lists.TryGetList("DOCUMENT LIBRARY NAME");
foreach (SPFile file in lista.RootFolder.Files)
{
String fileUrl = web.Url + "/" + lista.RootFolder.Url + "/" + file.Url;
var ret = XDocument.Load(fileUrl);
}
}
}
});
.
xDocument.loadコマンドに到達すると、「401不正な」例外を取得します..
コードに何か問題がありますか?XDocumentは間違ったPribilegeで実行されていますか?
ありがとうございました
解決
xDocument.loadの実装は、XMLファイルを取得するための認証済み要求をサポートしていません。
しかし、あなたが撮っているアプローチは、文書が開かれるたびに2つのWeb要求が行われていることを意味するため、もう1つの方法があります。
- spfileオブジェクトを使用してURLを構築する
- 手順1で構築されたURLを使用してSPFileオブジェクトにアクセスするには。
FileURL変数を構築するのは、xDocument.load()の別のオーバーロードを使用しますか?今回はURIの代わりにストリームオブジェクトを渡します。
あなたはあなたが必要とするすべての情報を持っていて、このような何かをすることができます: -
.SPFileCollection filesInFolder = lista.RootFolder.Files; foreach(SPFile file in filesInFolder) { using(Stream fileStream = file.OpenBinaryStream()) { XDocument xmlDocument = XDocument.Load(fileStream); fileStream.Close() } }
私はコードを試していませんが、あなたがどのように着手するかを私たちに知らせました。 また、これがメモリリークを発生させていないことを確認するためにSPDisposeCheckを実行してください。
他のヒント
私は、私は私が "標準的な"アプリにあるように私がストリームを管理することができます。
今使用するコード(そして作品は:
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite sito = new SPSite("SITE URL"))
{
using (SPWeb web = sito.OpenWeb())
{
SPList lista = web.Lists.TryGetList("DOCUMENT LIBRARY NAME");
foreach (SPFile file in lista.RootFolder.Files)
{
MemoryStream mStream = new MemoryStream(file.OpenBinary());
StreamReader reader = new StreamReader(mStream, true);
XDocument documento = XDocument.Load(reader, LoadOptions.None);
//MY CODE
}
}
}
});
. Simon Doyのメソッドは私のために機能しませんでした - xDocument.load()メソッドにストリームを読み込むとエラーが発生します - msgstr "" "system.xml.linq.xdocument.load(system.xml.xmlReader) 'に最適なオーバーロードされたメソッドmatchが' ''無効な引数"と msgstr "'' 1 ':' system.io.stream 'から' system.xml.xmlReader '" に変換できません。
今やし、私は文書ライブラリ内のファイルの代わりにSharePoint Designerを使用してSharePointサイトのフォルダ構造に追加したばかりのXMLファイルを作成しようとしていましたが、渡すことの違いが表示されます。StreamReaderは、ZIBAのメソッドを使用するときに機能することができましたが、ストリームを受け入れることはできませんでした。/ P>
string siteUrl = SPContext.Current.Site.Url;
string xmlpath = siteUrl + @"/includes/XML/myFile.xml";
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPFile file = web.GetFile(xmlpath);
MemoryStream mStream = new MemoryStream(file.OpenBinary());
StreamReader reader = new StreamReader(mStream, true);
XDocument doc = XDocument.Load(reader, LoadOptions.None);
//MY CODE
}
}
});
.
これはテストされています。