CustomVision API returns “操作返回无效状态代码:'Bad Request'”
CustomVision API returns “Operation returned an invalid status code: 'Bad Request'”
像这样使用 CustomVisionPredictionClient 时出现此错误:
var predictionApi = new CustomVisionPredictionClient()
{
ApiKey = _predictionKey,
Endpoint = "https://westeurope.api.cognitive.microsoft.com"
};
var result = await predictionApi.ClassifyImageAsync(project.Id, _modelName, imageData);
- project/project id 是通过训练 API 检索到的,我可以毫无问题地调用 GetProjects()。它应该是正确的,如果我把它改成错误的东西,我会得到一个 "not found" 异常。
- _modelName 是迭代的发布名称("xxxRecognition",请参见下面的屏幕截图),它也应该是正确的,当我更改它时我得到 "not found".
- imageData 只是来自 PNG 图像的文件流。
这里有两个问题需要解决。
你的特别"Bad Request"
具体来说,您的示例存在一个或多个您没有真正包含的问题。
_modelName
格式不正确
imageData
格式不正确
- 某些配置(可能是请求 headers)丢失或不正确
这是我们从您提供的示例中所能提供的最多信息。但是,其他 关注点将在未来对您大有裨益:"Bad Request" 告诉您 很多 所发生的事情。
关于 "Bad Request" 的更多信息
如果您查看 HTTP status codes 内的范围,您会注意到 "error" 范围内的模式。
- 在
4xx
中请求者(您)做错了,您可以改正。
- 在
5xx
中,响应者做错了事,你 不能 更正它。
在那之下:
- 在
404 Not Found
中,请求似乎形成良好,但响应者无法找到您所请求的内容
- 在
401 Unauthorized
中您没有提供任何类型的身份
- 在
403 Forbidden
中,您 确实 提供了身份,但不允许您执行此操作
但在 400 Bad Request
中,响应者根本无法将您的请求验证为良好输入 。这意味着您可以再次查看 API 文档,将其与您的实现进行比较,然后再试一次。
问题是我创建了一个 "Object Detection" 类型的项目并尝试将其与 ClassifyImage() 一起使用,而后者必须与 "Classification" 类型的项目一起使用。所以我必须改用 DetectImage() 。 :)
像这样使用 CustomVisionPredictionClient 时出现此错误:
var predictionApi = new CustomVisionPredictionClient()
{
ApiKey = _predictionKey,
Endpoint = "https://westeurope.api.cognitive.microsoft.com"
};
var result = await predictionApi.ClassifyImageAsync(project.Id, _modelName, imageData);
- project/project id 是通过训练 API 检索到的,我可以毫无问题地调用 GetProjects()。它应该是正确的,如果我把它改成错误的东西,我会得到一个 "not found" 异常。
- _modelName 是迭代的发布名称("xxxRecognition",请参见下面的屏幕截图),它也应该是正确的,当我更改它时我得到 "not found".
- imageData 只是来自 PNG 图像的文件流。
这里有两个问题需要解决。
你的特别"Bad Request"
具体来说,您的示例存在一个或多个您没有真正包含的问题。
_modelName
格式不正确imageData
格式不正确- 某些配置(可能是请求 headers)丢失或不正确
这是我们从您提供的示例中所能提供的最多信息。但是,其他 关注点将在未来对您大有裨益:"Bad Request" 告诉您 很多 所发生的事情。
关于 "Bad Request" 的更多信息
如果您查看 HTTP status codes 内的范围,您会注意到 "error" 范围内的模式。
- 在
4xx
中请求者(您)做错了,您可以改正。 - 在
5xx
中,响应者做错了事,你 不能 更正它。
在那之下:
- 在
404 Not Found
中,请求似乎形成良好,但响应者无法找到您所请求的内容 - 在
401 Unauthorized
中您没有提供任何类型的身份 - 在
403 Forbidden
中,您 确实 提供了身份,但不允许您执行此操作
但在 400 Bad Request
中,响应者根本无法将您的请求验证为良好输入 。这意味着您可以再次查看 API 文档,将其与您的实现进行比较,然后再试一次。
问题是我创建了一个 "Object Detection" 类型的项目并尝试将其与 ClassifyImage() 一起使用,而后者必须与 "Classification" 类型的项目一起使用。所以我必须改用 DetectImage() 。 :)