Web API 2 将 URL 编码为 Google APIs

Web API 2 encodes URLs to Google APIs

我正在使用 Web API 2 创建 Google Analytics Reporting API v4 代理。我正在使用 Google.Apis.AnalyticsReporting.v4 库成功创建请求参数并成功地使用服务帐户进行身份验证。但是,当运行 BatchGet.Execute() 方法时,请求批量报告失败。

Fiddler 显示请求是 404:

在此服务器上找不到请求的 URL /v4/reports%3AbatchGet。这就是我们所知道的。

使用 Postman 我可以看到如果 URL 是正确的 (<a href="https://analyticsreporting.googleapis.com/v4/reports:batchGet" rel="nofollow noreferrer">https://analyticsreporting.googleapis.com/v4/reports:batchGet</a>) 请求成功。 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.31.1 中修复。解决方案正在更新到最新版本。

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