2

以下は、Azure ACS(アクセス制御サービス)からSWTトークンを取得するためにmsdnによって提供されるコードサンプルです。

private static string GetTokenFromACS(string scope)
{
    string wrapPassword = pwd;
    string wrapUsername = uid;

    // request a token from ACS
    WebClient client = new WebClient();
    client.BaseAddress = string.Format(
        "https://{0}.{1}", serviceNamespace, acsHostUrl);

    NameValueCollection values = new NameValueCollection();
    values.Add("wrap_name", wrapUsername);
    values.Add("wrap_password", wrapPassword);
    values.Add("wrap_scope", scope);

    byte[] responseBytes = client.UploadValues("WRAPv0.9/", "POST", values);

    string response = Encoding.UTF8.GetString(responseBytes);

    Console.WriteLine("\nreceived token from ACS: {0}\n", response);

    return HttpUtility.UrlDecode(
        response
        .Split('&')
        .Single(value => value.StartsWith("wrap_access_token=", StringComparison.OrdinalIgnoreCase))
        .Split('=')[1]);
}

RestSharpを使用してコードを複製しようとしています。

var request = new RestRequest("WRAPv0.9", Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("wrap_name", uid, ParameterType.RequestBody);
request.AddParameter("wrap_password", pwd, ParameterType.RequestBody);
request.AddParameter("wrap_scope", realm, ParameterType.RequestBody);

RestClient client = new RestClient(
    string.Format(@"https://{0}.{1}", serviceNamespace, acsHostUrl));

client.ExecuteAsync(request, Callback);

上記のコードの他のバリエーションを試しましたが、役に立ちませんでした。私は次のような415エラーを受け取り続けます。

415サポートされていないメディアタイプT8000コンテンツタイプ'text/plain'はサポートされていません。リクエストのコンテンツタイプは「application/x-www-form-urlencoded」である必要があります。

私はFiddlerの専門家ではありませんが、経験が限られているため、暗号化されているため、送信httpリクエストを検査できませんでした。

問題の解決についてアドバイスをいただければ幸いです。

4

1 に答える 1

1

AddHeaderメソッド呼び出しを省略して、代わりにContent-Typeを最初に設定することができますAddParameter
この問題はここで説明されています

于 2013-02-20T22:11:30.120 に答える