启用 Azure Active Directory 身份验证后,Azure 移动应用将 Http POST 调用重定向到 GET

Azure Mobile App redirecting Http POST calls to GET when Azure Active Directory Authentication is enabled

我正在浏览位于 https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-backend-how-to-use-server-sdk

的 Azure 移动应用后端教程的 .NET 部分

我使用默认示例 TodoItemController 将所有设置都设置得很好。我通过将代码添加到 PostToDoItem 控制器方法来将推送通知添加为 instructed

然后我使用 Postman 测试了 POST 调用并放入了一个简单的新项目:

我在 Xamarin.Forms 移动应用程序中收到成功推送通知:

但是,当我在我的移动应用程序服务中启用 Azure Active Directory 身份验证并同时保持 "Allow Anonymous requests (no action)" 开启时,我无法再通过 Postman 发送 POST 呼叫。更具体地说,App Service 似乎收到了 POST 请求,但立即将其重定向并生成 GET 请求。这会导致调用控制器中的 GetAllToDoItems 方法而不是 PostToDoItem 方法。我在日志流中看到了这个:

 > 2017-05-31T01:33:46  PID[4292] Verbose     Received request: POST
> http://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46  PID[4292] Information Redirecting:
> https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46  PID[4292] Verbose     Received request: GET
> https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46  PID[4292] Verbose     [Routes(Preview)] No
> authorization configuration was found. 2017-05-31T01:33:46  PID[4292]
> Information Request, Method=GET,
> Url=https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0,
> Message='https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0'
> 2017-05-31T01:33:46  PID[4292] Information Message='TodoItem',
> Operation=DefaultHttpControllerSelector.SelectController
> 2017-05-31T01:33:46  PID[4292] Information
> Message='XYZService.Controllers.TodoItemController',
> Operation=DefaultHttpControllerActivator.Create 2017-05-31T01:33:46 
> PID[4292] Information
> Message='XYZService.Controllers.TodoItemController',
> Operation=HttpControllerDescriptor.CreateController
> 2017-05-31T01:33:46  PID[4292] Information Message='Selected action
> 'GetAllTodoItems()'',
> Operation=ApiControllerActionSelector.SelectAction

我希望此 POST 调用与我将应用服务身份验证设置为 OFF 时的工作方式相同,因为我告诉 Azure 在收到匿名请求时不采取任何操作。我是不是误解了什么?提前致谢!

我们开启应用服务authentication/authorization后,如果我们使用HTTP协议发送请求,服务器会重定向到 HTTPS 通过 302 响应。

要让它在这种情况下工作,您可以使用 HTTPS 协议而不是 HTTP 发送请求。如果您启用 允许匿名请求(无操作) 功能,这应该有效。