繁体   English   中英

Azure 移动应用程序 - 尝试 POST 时出现 405(不允许的方法)

[英]Azure Mobile App - Getting 405 (Method Not Allowed) when trying POST

我正在尝试将我的 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
    }
}

我也尝试过:

  • 在 web.config 中设置 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)配置的允许方法和允许的标头。 我只能使用 web.config 和消息处理程序控制所有设置。 但无论如何它并没有解决405问题。

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

有任何想法吗? 目前很难找到关于移动应用程序的好的文档,如果 .NET 后端部分是开源的,我将不胜感激......对我来说这有点像一个黑盒子。

当您激活应用服务授权并忘记将您的移动客户端 url 从 http 更改为 https 时,可能会发生这种情况。 如果是这样,您的 http Post 将被重定向到 https url,但带有 Get 消息。 感谢 Fiddler 找到它。

OMG,我发现我的代码有问题。 我不得不交换这两个语句:

// 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 作为 Get 重定向到 https url,请尝试直接调用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM