私は青空でホストされているWebアプリケーションを持っています。私が郵便配達員を使ってリクエストをするとき、私は jsonの結果を得ます。これはcorrecetの応答です。同じトークンを使用してC#経由で同じリクエストを作成しようとすると、errprが返されます - リモートサーバーからエラーが返されました:(401)Unauthorized。httpはブラウザとポストマンで動作しますが、C#httpwebrequestを使用して401を取得します
ここにリクエストに使用するコードがあります。
public string RequestData(string queryString, string token)
{
var request = (HttpWebRequest)WebRequest.Create(queryString);
request.Proxy = GetProxy();
request.Credentials = CredentialCache.DefaultCredentials;
request.PreAuthenticate = true;
request.UseDefaultCredentials = true;
request.Method = "GET";
request.ContentType = "application/json";
request.ContentLength = 0;
request.CookieContainer = new CookieContainer();
request.Headers.Add("authorization", "Bearer " + token);
using (var webresponse = request.GetResponse())
{
if (webresponse.GetResponseStream() == Stream.Null)
{
throw new Exception("Response stream is empty");
}
var response = (HttpWebResponse)webresponse;
if (response.StatusCode != HttpStatusCode.OK)
{
return response.StatusCode.ToString();
}
else
{
return response.StatusCode.ToString();
}
}
}
私はそれが正しいことを確認するためにトークンをダブルチェックしました。 私が言いたいことは、インターセプタを有効にしないで Postmanで最初に動作しなかった点です。これは、Advanced Rest Clientになります。 "XHR"を有効にしてARCクッキー交換をインストールするまでリクエストが機能しませんでした。
私はFiddlerのリクエストヘッダーをチェックしましたが、それ以外のヘッダーはありません(私も同様に追加します)。
UPDATE:
私は郵便配達で成功し応答(https://www.getpostman.com/) を持って、それがRestSharpを使用してC#のために生成されたコードを実行しました。応答 でスローされたエラーは
"このディレクトリまたはページを表示する権限がありませんでした。
トークンが正しくないことを示す。これはPostmanとAdvanced Rest Clientで が動作するので混乱します。また、私は、私は次のコードを使用してのClientIDと秘密使って呼び出しごとにトークン を取得言及する必要があります:紺碧にログをチェックした後
public async static Task<AzureAccessToken> CreateOAuthAuthorizationToken(string clientId, string clientSecret, string resourceId, string tenantId)
{
AzureAccessToken token = null;
var oauthUrl=string.Format("https://login.microsoftonline.com/{0}/oauth2/token", tenantId);
var reqBody = String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}",clientId, clientSecret);
var client = new HttpClient();
HttpContent content = new StringContent(reqBody);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
using (HttpResponseMessage response = await client.PostAsync(oauthUrl, content))
{
if (response.IsSuccessStatusCode)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AzureAccessToken));
Stream json = await response.Content.ReadAsStreamAsync();
token = (AzureAccessToken)serializer.ReadObject(json);
return token;
}
return null;
}
}
愚かな質問ですが、あなたの郵便配達人にはトークン変数で使用されているのと同じトークン値が使用されていますか? –
はい、ダブルチェックしました – noobie
この場合、私はあなたのプロキシがリクエストをブロックしていると信じています –