Azure移动应用程序-在尝试POST时获得405(方法不允许)

本文关键字:方法 不允许 POST 应用程序 移动 Azure | 更新日期: 2023-09-27 18:04:53

我正在尝试将我的Azure移动服务。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
    }
}

What I try too:

  • 在web中设置CORS设置。配置(自定义头/不同的设置),例如。<add name="Access-Control-Allow-Methods" value="GET,POST,DELETE,HEAD,PUT,PATCH,OPTIONS" />
  • 根据此博客文章添加了cors消息处理程序
    (http://blog.bittercoder.com/2012/09/09/cors-and-webapi/)
  • 此处理程序也被删除:<remove name="OPTIONSVerbHandler" />

我注意到的一件事是,Azure移动应用程序组件似乎覆盖了我使用config.EnableCors(cors)配置的允许的方法和允许的头。我只能通过网络控制所有设置。配置和消息处理程序。但无论如何,它并没有解决405号公路的问题。

在这一点上,我不确定这是否是一个CORS问题。

任何想法?目前很难找到关于移动应用程序的优秀文档,如果。net后端部分能够开源,我会很感激……它对我来说有点像黑盒子

Azure移动应用程序-在尝试POST时获得405(方法不允许)

当你激活App Service Authorization而忘记将你的移动客户端url从http更改为https时,可能会发生这种情况。如果是这样,您的http Post将被重定向到https url,但带有Get消息。

天哪,我发现我的代码有问题。我必须交换这两个语句:

// 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移动应用程序重新插入它,但是我在错误的地方做了,所以要小心。

如果http Post被重定向到https url为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