C# 如何在Azure Function App中从请求正文检索字节数据

C# 如何在Azure Function App中从请求正文检索字节数据,c#,python,byte,azure-functions,azureportal,C#,Python,Byte,Azure Functions,Azureportal,在Python中,我将图像转换为字节。然后,我像这样将字节传递给Azure HTTP触发器函数应用程序端点URL(Azure门户),就像调用Azure认知服务时一样 image\u path=r“C:\Users\User\Desktop\bicycle.jpg” image\u data=open(image\u路径,“rb”).read() 打印(len(图像#u数据))#打印长度以供以后比较 url=”https://xxxx.azurewebsites.net/api/HTTPTrigg

在Python中,我将图像转换为字节。然后,我像这样将字节传递给Azure HTTP触发器函数应用程序端点URL(Azure门户),就像调用Azure认知服务时一样

image\u path=r“C:\Users\User\Desktop\bicycle.jpg”
image\u data=open(image\u路径,“rb”).read()
打印(len(图像#u数据))#打印长度以供以后比较
url=”https://xxxx.azurewebsites.net/api/HTTPTrigger1........."
headers={'Content-Type':'application/octet-stream'}
response=requests.post(url,headers=headers,
数据=图像(数据)
但是,我不知道如何在Azure Portal上的函数应用程序中检索字节数据。我尝试了以下方法,但没有成功。似乎
ReadToEndAsync()
不是要从请求体读取字节数据吗?或者是因为
HttpRequest

公共静态异步任务运行(HttpRequest请求,ILogger日志)
{
string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
byte[]imageBytes=Encoding.ASCII.GetBytes(请求体);
log.LogInformation(imageBytes.Length.ToString());
//记录的长度与Python中的len(image_data)完全不同
//忽略以下行(不相关)
返回名称!=null
?(ActionResult)新的OkObjectResult(“OK”)
:new BadRequestObjectResult(“请在查询字符串或请求正文中传递名称”);
}
你知道吗?我确实知道使用base64字符串的解决方法,但我真的很好奇Azure认知服务是如何做到这一点的


提前感谢。

不要使用
ReadToEndAsync()
,而是使用
MemoryStream()
ReadToEndAsync()
用于读取字符串缓冲区,该缓冲区会将传入的字节数据弄乱。使用
CopyToAsync()
,然后将内存流转换为字节数组以保留传入的字节数据

公共静态异步任务运行(HttpRequest请求,ILogger日志)
{
//string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
MemoryStream ms=新的MemoryStream();
等待请求正文CopyToAsync(毫秒);
byte[]imageBytes=ms.ToArray();
log.LogInformation(imageBytes.Length.ToString());
//忽略以下内容(不相关)
string finalString=“上传成功”;
Returner returnerObj=新的Returner();
returnerObj.returnString=finalString;
var jsonToReturn=JsonConvert.SerializeObject(returnerObj);
返回新的HttpResponseMessage(HttpStatusCode.OK){
Content=newstringcontent(jsontoreurn,Encoding.UTF8,“application/json”)
};
}
公务舱返回者
{
公共字符串returnString{get;set;}
}
参考/灵感来自: