使用POSTMAN,我可以将BODY包含到包含2个文本字段和一个文件流的表单数据的BODY中。实际上,使用Postman,我可以使主体为空,并且仍将其发布到Api端点,正如我在远程调试时用断点确认的那样。
并且,使用HttpClient的代码可以在本地运行时(即:http://XXXXXXXazurewebsites.net/api/Blob/UploadDoc)发布到AspnetCore Api端点。
但是当在Azure上部署了相同的终结点代码时,HttpClient.PostAsync在发布到Postman能够向其发出POST请求的完全相同的URL时接收到404。
问题:如何在本地运行的IISExpress的2个实例上工作,但是在Azure中部署时失败?
客户端代码在Presentation App Svc中的控制器上的[HttpPost]方法内部,并将请求内容以流的形式转发到在不同App Svc中运行的Api控制器:
http://localhost:8888/api/Blob/UploadDoc我还尝试将流作为byte []读取并从byte []创建HttpContent。但是HttpClient.Post也得到了一个404,ala:
HttpClient localclient = new HttpClient(); //localclient.BaseAddress = new System.Uri("http://localhost:8888/api/"); //works posting to here localclient.BaseAddress = new System.Uri("http://XXXXXXXXX.azurewebsites.net/api/"); //404 posting to site on azure! HttpContent contentStream = new StreamContent(request.Body); await localclient.PostAsync("Blob/UploadDoc", contentStream);
Api代码如下:
var memstream = new MemoryStream(); await request.Body.CopyToAsync(memstream); memstream.Position = 0; var contentba = new ByteArrayContent(memstream.ToArray()); var response = await localclient.PostAsJsonAsync("Blob/UploadDoc", contentba); response.EnsureSuccessStatusCode(); // 404 when posting to site on Azure
并且浏览器正在上传文件ala:
[HttpPost("UploadDoc")]
[DisableFormValueModelBinding]
public async Task<IActionResult> UploadBlobAsync()
{
//work with Request ...
}
使用POSTMAN,我可以将BODY包含到包含2个文本字段和一个文件流的表单数据的BODY中发布到http://XXXXXXXazurewebsites.net/api/Blob/UploadDoc。实际上,有了邮递员,我可以让尸体成为...
您如何部署到Azure Web Apps?由于在Azure Web Apps上运行的asp.net核心应用程序托管在IIS上。因此,需要一个web.config文件来在IIS上配置您的应用程序。
我认为这是由于未将Request.Body位置设置为零,或以某种方式未正确构建请求而引起的,这又导致目标主机不考虑Post请求来匹配其任何端点。] >
如果我按以下方式提出请求,那么它将起作用: