Azure移动应用程序 – 尝试POST时获取405(方法不允许)
我正在尝试将Azure Mobile Service .NET后端迁移到Azure移动应用程序。
我使用的是一些自定义Web Api控制器,迁移后我得到405 (Method Not Allowed)
/ The requested resource does not support http method 'POST'.
尝试POST到以前工作的控制器方法时出错。
我花了几个小时尝试不同的CORS设置但到目前为止我没有成功。
这就是我目前配置Web Api的方式:
HttpConfiguration config = new HttpConfiguration(); new MobileAppConfiguration() .UseDefaultConfiguration() .ApplyTo(config); var cors = new EnableCorsAttribute("*", "*","*"); //var cors = new EnableCorsAttribute("*", "*","GET,POST,DELETE,HEAD,PUT,PATCH,OPTIONS"); config.EnableCors(cors); config.Routes.MapHttpRoute( name: "Rest", routeTemplate: "rest/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.MapHttpAttributeRoutes();
控制器看起来像这样:
[Authorize] [RoutePrefixAttribute("rest/companies")] public class CompaniesController : ApiController { [HttpPost] [Route("my-active")] //[EnableCors("*","*","*")] public HttpResponseMessage SetActive(/*[FromBody]*/Company company) { // Implementation } }
我也尝试了什么:
- 在web.config中设置CORS设置(自定义标头/不同设置),例如。
- 根据此博客文章添加了cors消息处理程序
( http://blog.bittercoder.com/2012/09/09/cors-and-webapi/ ) - 此处理程序也被删除:
我注意到的一件事是,Azure移动应用程序组件似乎覆盖了允许的方法,并允许我使用config.EnableCors(cors)
配置的标头。 我只能使用web.config和消息处理程序来控制所有设置。 但它无论如何都没有解决405问题。
在这一点上,我不确定它是否是一个CORS问题。
有任何想法吗? 目前很难找到关于移动应用程序的好文档,如果.NET后端部分是开源的,我将不胜感激……这对我来说有点像黑盒子。
当您激活App Service授权并忘记将您的移动客户端URL从http更改为https时,可能会发生这种情况。 如果是这样,您的http Post将被重定向到httpsurl,但会显示Get消息。 感谢Fiddler。
天啊,我发现我的代码存在问题。 我不得不交换这两个陈述:
// Needs to be called before MapHttpRoute config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "Rest", routeTemplate: "rest/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
当我使用Azure移动服务时,调用MapHttpAttributeRoutes
导致错误“已添加具有相同密钥的项目”,因此我删除了该行。 我不得不再次为Azure Mobile Apps重新插入它以使属性路由工作,但我在错误的地方做了,所以要小心。
如果http Post被重定向到httpsurl为Get,请尝试直接呼叫https。
在这种情况下,Azure日志如下所示:
Received request: POST http://xxx.azurewebsites.net/api/Data/test Information Redirecting: https://xxx.azurewebsites.net/api/Data/test Received request: GET https://xxx.azurewebsites.net/api/Data/test
在这种情况下,请致电https://xxx.azurewebsites.net/api/Data/test
- entity framework包含没有嵌套属性
- 如何从WebApi动作返回html页面?
- 在WebAPI C#中请求反序列化期间捕获exception#
- 如何解析MultipartFormDataContent
- 返回HttpResponseMessage并配置Application Insights时,WebAPI响应永远不会完成
- 将WebSockets与ASP.NET Web API一起使用
- ASP.NET web api无法获得application / x-www-form-urlencoded HTTP POST
- 使用ASP.NET Web API将表单yyyy-MM-dd的日期查询参数反序列化为noda time LocalDate对象
- 如何在asp.net core web api(没有第三方)中实现JWT Refresh Tokens?