Web API 2 кодирует URL-адреса для API Google

Я использую Web API 2 для создания прокси-сервера API Google Analytics Reporting v4. Я успешно создаю параметры запроса, используя Google.Apis.AnalyticsReporting.v4 библиотека и успешно аутентификация с учетной записью службы. Однако при запуске BatchGet.Execute() метод, запрос на пакетные отчеты не удается.

Fiddler показывает запрос 404:

Запрашиваемый URL /v4/reports%3AbatchGet не был найден на этом сервере. Это все, что мы знаем.

Используя Почтальон, я вижу, что если URL был верным ( https://analyticsreporting.googleapis.com/v4/reports:batchGet) запрос успешно выполнен. Что-то в серверной части Web API или.NET 4.6.1 кодирует URL-адрес запроса и заставляет Google отправить обратно 404.

Как настроить Web API 2 таким образом, чтобы он разрешал двоеточие в URL-адресе для запроса Google API?

public IHttpActionResult Post([FromBody] RequestObject req)
        {
            var resp = new CompleteResponse();
            try
            {
                var service = new AnalyticsReportingService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = Cert,
                    ApplicationName = "GA Test"
                });
                var report = new GetReportsRequest();

                var result = service.Reports.BatchGet(report).Execute();
                resp.Result = result.Reports[0].Data;
            }
            catch (Exception ex)
            {
                resp.Error = ex.ToString();
            }
            return Ok(resp);
        }

Global.asax:

protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
                "text/html",
                StringComparison.InvariantCultureIgnoreCase,
                true,
                "application/json"));
        }

WebApiConfig.cs

public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

1 ответ

Решение

Существует известная ошибка, которая была исправлена ​​в 1.31.1. Решение было обновление до последней версии.

См. https://github.com/google/google-api-dotnet-client/pull/1121

Другие вопросы по тегам