目标:使用asp.net web / api,定义允许通过字节数组上传图像的签名,并使用python请求测试操作。
问题:我似乎无法获得除不支持的媒体类型以外的响应
津贴:我控制了API,所以只要最终以字节数组结尾,我就可以根据需要进行修改,这样我就不必重新编写业务了层
我的第一次刺伤:
(ASP.Net Api-Controller)方法):
[Route("api/scenes/{id}/images")]
[Route("api/v0/scenes/scenes/{id}/images")]
[HttpPost]
public HttpResponseMessage AddImageToScene(long id, string type, [FromBody] byte[] value)
我的Python脚本:
# FORM THE FULLY QUALIFIED PATH
file_name = name + ".png"
path = os.path.join(resource_path, file_name)
# SEND THE COMMAND
files = {'image': (file_name, open(path, 'rb'), 'image/png')}
url = helper.baseUri + self.route
requests.post(url, files=files)
响应(来自我自己的输出打印机):
[ERROR] Api调用返回错误415 [ERROR] Unsupported Media 型
结论: 我尝试过多种变体,是的,我已经查看了文档here,但我似乎并不聪明,无法使其发挥作用。我怀疑我并不是真的想把它称为图像,因为我把它分成了字节 - 但我没有看到任何我认为合适的MIME选项。
答案 0 :(得分:0)
为了后人的缘故,虽然从我最初的方法改变了,但我确实得到了以下工作。请注意,我不相信我需要这里的类型作为参数,因为我应该能够从请求标题中提取媒体类型...我还没有达到它。
public HttpResponseMessage AddImageToScene2(long id, string type)
{
SceneHandler handler = null;
try
{
var content = Request.Content;
var asBytes = content.ReadAsByteArrayAsync().Result;
using (handler = new SceneHandler()) // <-- my own custom class
{
var image = new ImageNewOrUpdate(asBytes, type);
var response = handler.AddImage(id, image.Value, image.ImageType);
return Request.CreateResponse(HttpStatusCode.Created, response);
}
}
catch (Exception ex)
{
return new HttpErrorResponseFactory(Request, ex, handler).GetResponse();
}
}