0

私は、さまざまなSharePointサイト内の[ストレージスペースの割り当て]セクションからデータを引き出すレポートを作成する必要があります。一般的なGET呼び出しを実行することで、一般的な「ドキュメントライブラリ」の値をスクリーンスクレイピングすることはできますが、プログラムで「リスト」の値を取得することはできません。SharePointサイト(* / _ layouts / storman.aspx)に移動すると、「ドキュメントライブラリ」がデフォルトの選択になります。「リスト」に変更するには、POST呼び出しを送信する必要があると思います[そうすれば、値を取得できます]。SharePointがキーと値のペアを認識していないように見えるため(または、必要なパラメーターのすべてを提供していない場合)、適切なPOST呼び出しを作成するのは面倒です。

このコードを試しましたが、うまくいきませんでした。「ドキュメントライブラリ」データのみが返されます。

using (System.Net.WebClient client = new System.Net.WebClient() { UseDefaultCredentials = true })
{
    NameValueCollection myQueryStringCollection = new NameValueCollection();
    myQueryStringCollection.Add(queryParameterName, queryParameterValue);

    client.QueryString = myQueryStringCollection;

    return client.DownloadString(url);
}

私もこれを試しました(他のアイデアと一緒に):

private static string GetWebResponse(string url, NameValueCollection parameters)
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.UseDefaultCredentials = true;
    httpWebRequest.ContentType = "application/x-www-form-urlencoded";
    httpWebRequest.Method = "POST";

    var sb = new StringBuilder();
    foreach (var key in parameters.AllKeys)
        sb.Append(key + "=" + parameters[key] + "&");
    sb.Length = sb.Length - 1;

    byte[] requestBytes = Encoding.UTF8.GetBytes(sb.ToString());
    httpWebRequest.ContentLength = requestBytes.Length;

    using (var requestStream = httpWebRequest.GetRequestStream())
    {
        requestStream.Write(requestBytes, 0, requestBytes.Length);
        requestStream.Close();
    }

    Task<WebResponse> responseTask = Task.Factory.FromAsync<WebResponse>(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, null);
    using (var responseStream = responseTask.Result.GetResponseStream())
    {
        var reader = new StreamReader(responseStream);
        return reader.ReadToEnd();
    }
}

_layouts / storman.aspxページのソースコードを見ると、送信する必要のある名前と値のペアがそれぞれct100 $ PlaceHolderMain$m_filterDropdownListsであることがわかります。私はこのビューのソースコードによってこれを決定しました:

<select name="ctl00$PlaceHolderMain$m_filterDropdown" id="ctl00_PlaceHolderMain_m_filterDropdown" class="ms-viewselect">
<option selected="selected" value="Document Libraries">Document Libraries</option>
<option value="Documents">Documents</option>
<option value="Lists">Lists</option>
<option value="Recycle Bin">Recycle Bin</option>
</select>

このページからリスト値を取得する方法について何かアイデアはありますか?

4

1 に答える 1

0

私はついにこれを理解しました...

SharePoint が予期しているすべての名前と値のクエリ パラメーターのペアを送信する必要があります。さらに複雑なことに、SharePoint が期待する __REQUESTDIGEST、__VIEWSTATE、__EVENTVALIDATION の値を取得するために、最初に GET 要求を実行する必要があります。また、SharePoint に送り返すときに、すべてのパラメーターを UrlEncoded にする必要があります。

于 2012-07-13T20:33:20.547 に答える