1

次のコードを使用して、Facebook リーダーボードでユーザー スコアを更新しようとしています。

string _url = "https://graph.facebook.com/MY_APP_ID/scores";
var _parameters="score=100&access_token=MY_APP_TOKEN_WITH_PUBLISH_ACTION";
WebRequest _request = WebRequest.Create(_url);
_request.Method = "POST";                 
var _dataArray = Encoding.ASCII.GetBytes(_parameters.ToString());                
_request.ContentLength = _dataArray.Length;

using (Stream _dataStream = _request.GetRequestStream())
{
    _dataStream.Write(_dataArray, 0, _dataArray.Length);
}
WebResponse _response = _request.GetResponse();

応答を取得しようとすると、アプリケーションは例外をスローします:

リモート サーバーがエラーを返しました: (400) 不正な要求。

私は何を間違っていますか?

4

1 に答える 1

1

私は実際、LinkedIn で似たようなことをしている最中です。これを try ブロックでラップして、次の例外ハンドラーを試してください。

catch (WebException webEx) {
    StringBuilder sb = new StringBuilder();

    sb.AppendLine(webEx.Message);

    sb.AppendLine();
    sb.AppendLine("REQUEST: ");
    sb.AppendLine();

    sb.AppendLine(string.Format("Request URL: {0} {1}", webRequest.Method, webRequest.Address));
    sb.AppendLine("Headers:");
    foreach (string header in webRequest.Headers) {
        sb.AppendLine(header + ": " + webRequest.Headers[header]);
    }

    sb.AppendLine();
    sb.AppendLine("RESPONSE: ");
    sb.AppendLine();

    sb.AppendLine(string.Format("Status: {0}", webEx.Status));

    if (null != webEx.Response) {
        HttpWebResponse response = (HttpWebResponse) webEx.Response;

        sb.AppendLine(string.Format("Status Code: {0} {1}", (int) response.StatusCode, response.StatusDescription));
        if (0 != webEx.Response.ContentLength) {
            using (var stream = webEx.Response.GetResponseStream()) {
                if (null != stream) {
                    using (var reader = new StreamReader(stream)) {
                        sb.AppendLine(string.Format("Response: {0}", reader.ReadToEnd()));
                    }
                }
            }
        }
    }

    _log.Warn(sb.ToString(), webEx);

    throw new Exception(webEx.Message, webEx);
}

それは少なくとも彼らが返しているものを記録します。私の場合、システムで問題を再現できませんでしたが、QA のサーバーは大量の 400 の不正な要求を受け取っていました。システム クロックが 7 分遅れており、LinkedIn がタイムスタンプを拒否していたため、無効なタイムスタンプであることが判明しました。

于 2012-10-02T17:04:26.380 に答える