Web API 2将URL编码为Google API

时间:2017-12-07 21:56:27

标签: asp.net-web-api2 google-analytics-v4

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

Fiddler显示请求是404:

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

使用Postman我可以看到如果URL正确(https://analyticsreporting.googleapis.com/v4/reports:batchGet)请求成功。 Web API或.NET 4.6.1后端的某些内容正在对请求URL进行编码,并导致Google发回404。

如何配置Web API 2,以便在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 个答案:

答案 0 :(得分:0)

1.31.1中已修复已知错误。解决方案是更新到最新版本。

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