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
我正在使用 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