2013-02-20 54 views
2

以下是MSDN获得从蔚蓝的ACS(访问控制服务)的SWT令牌所提供的代码示例: Azure的ACS获取令牌使用RestSharp 415错误

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'。

我不是一个提琴手专家,但与我有限的经验,我无法检查我的传出http请求,因为它是加密的。

我希望能够解决这个问题。

回答

1

您可以尝试省略AddHeader方法调用,而将内容类型设置为第一个AddParameter
问题is described here

相关问题