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