Oauth2資格情報を使用するコンソールアプリケーションをデバッグしており、サービスプロバイダはリダイレクトURIを指定する必要があります。サービスプロバイダのWebポータルでリダイレクトURIを指定します。このサービスはGoogle Analyticsです。Visual StudioでのC#.NET非同期/要求待ちのためのLocalhostポートの指定
Node.jsアプリケーションを使用して正常にサービスをテストしました。サービスの設定では、リダイレクトURIをhttp://localhost:8080
と指定しました。 Nodeアプリケーションはデフォルトでポート8080から実際に起動するので、http-server
を実行し、http://localhost:8080
を参照してサービスを呼び出し、データの応答を確認します。
ただし、C#コンソールアプリケーションで同じサービスを呼び出そうとすると、ブラウザでHTTP 400エラーが発生します。エラー状態:
The redirect URI in the request, http://localhost:59291/authorize/, does not match the ones authorized for the OAuth client.
私は、アプリケーション、ポートの変更を実行しようとするたびに。ここで(Analytics Reporting API V4 Client Library for .NETから参照)のコードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Google.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System.Threading;
namespace Google_Analytics_API_Test
{
class Program
{
static void Main(string[] args)
{
try
{
var credential = GetCredential().Result;
using (var svc = new AnalyticsReportingService(
new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "Google Analytics API Console"
}))
{
var dateRange = new DateRange
{
StartDate = "2017-04-24",
EndDate = "today"
};
var sessions = new Metric
{
Expression = "ga:sessions",
Alias = "Sessions"
};
var date = new Dimension { Name = "ga:date" };
var reportRequest = new ReportRequest
{
DateRanges = new List<DateRange> { dateRange },
Dimensions = new List<Dimension> { date },
Metrics = new List<Metric> { sessions },
ViewId = "<<viewID>>"
};
var getReportsRequest = new GetReportsRequest
{
ReportRequests = new List<ReportRequest> { reportRequest }
};
var batchRequest = svc.Reports.BatchGet(getReportsRequest);
var response = batchRequest.Execute();
foreach (var x in response.Reports.First().Data.Rows)
{
Console.WriteLine(string.Join(",", x.Dimensions) +
" " + string.Join(", ", x.Metrics.First().Values));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
static async Task<UserCredential> GetCredential()
{
using (var stream = new FileStream("client_secret.json",
FileMode.Open, FileAccess.Read))
{
const string loginEmailAddress = "<<emailAddress>>";
return await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { AnalyticsReportingService.Scope.Analytics },
loginEmailAddress, CancellationToken.None,
new FileDataStore("GoogleAnalyticsApiConsole"));
}
}
}
}
私はデバッグのための静的ポートをIIS Expressを設定する方法を検索しましたが、私はIISがここにも関与していることはよく分からない - だけではなく、 Google Analyticsライブラリによって実装されているTcpClient/TcpListener
オブジェクトのようなものですか?
C#.NETコンソールアプリケーションでasync/await要求のポートを指定する方法はありますか?
jsonファイルの生成と設定を含め、*設定*の手順はすべて完了しましたか? OAuthコールバックはWebサイトアプリケーション向けであり、コールバック用ではありません。これは、OAuthプロバイダがあなたの「ウェブサイト」に「私はこのトークンを持つユーザを認証して、彼を通過させる」と言っている方法です。明らかに、これはデスクトップクライアントアプリケーションにとって無意味です。 –
明示的にリンクされた答えと*はコールバックをもたらさない*。新しいプロジェクトを作成し、その回答に記載されている手順に従って、すべての設定手順を完了し、すべての定数を正しい値に設定し、jsonファイルなどに正しい設定を書き込んでください。 –