Azure 移动应用程序 - 尝试时出现 405(方法不允许)POST
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 设置(自定义 headers / 不同的设置),例如。
<add name="Access-Control-Allow-Methods" value="GET,POST,DELETE,HEAD,PUT,PATCH,OPTIONS" />
- 根据此博客添加了一个 cors 消息处理程序 post
(http://blog.bittercoder.com/2012/09/09/cors-and-webapi/)
- 此处理程序也已删除:
<remove name="OPTIONSVerbHandler" />
我注意到的一件事是,Azure 移动应用程序组件似乎覆盖了允许的方法并允许我使用 config.EnableCors(cors)
配置的 headers。我只能使用 web.config 和消息处理程序来控制所有设置。但是无论如何也没有解决405问题
在这一点上,我完全不确定这是否是 CORS 问题。
有什么想法吗?目前很难找到关于移动应用程序的好文档,如果 .NET 后端部分能够开源,我将不胜感激……这对我来说有点像黑匣子。
天哪,我发现我的代码有问题。我不得不交换这两个语句:
// Needs to be called before MapHttpRoute
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Rest",
routeTemplate: "rest/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
由于我使用的是 Azure 移动服务,调用 MapHttpAttributeRoutes
导致错误 'An item with the same key has already been added',因此我删除了该行。我不得不再次为 Azure 移动应用程序重新插入它以使属性路由正常工作,但我在错误的地方插入它,所以要小心。
当您激活应用服务授权并忘记将您的移动客户端 url 从 http 更改为 https 时,可能会发生这种情况。
如果是这样,您的 http Post 将被重定向到 https url 但带有 Get 消息。
感谢 Fiddler 找到它。
如果 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
我正在尝试将我的 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 设置(自定义 headers / 不同的设置),例如。
<add name="Access-Control-Allow-Methods" value="GET,POST,DELETE,HEAD,PUT,PATCH,OPTIONS" />
- 根据此博客添加了一个 cors 消息处理程序 post
(http://blog.bittercoder.com/2012/09/09/cors-and-webapi/) - 此处理程序也已删除:
<remove name="OPTIONSVerbHandler" />
我注意到的一件事是,Azure 移动应用程序组件似乎覆盖了允许的方法并允许我使用 config.EnableCors(cors)
配置的 headers。我只能使用 web.config 和消息处理程序来控制所有设置。但是无论如何也没有解决405问题
在这一点上,我完全不确定这是否是 CORS 问题。
有什么想法吗?目前很难找到关于移动应用程序的好文档,如果 .NET 后端部分能够开源,我将不胜感激……这对我来说有点像黑匣子。
天哪,我发现我的代码有问题。我不得不交换这两个语句:
// Needs to be called before MapHttpRoute
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Rest",
routeTemplate: "rest/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
由于我使用的是 Azure 移动服务,调用 MapHttpAttributeRoutes
导致错误 'An item with the same key has already been added',因此我删除了该行。我不得不再次为 Azure 移动应用程序重新插入它以使属性路由正常工作,但我在错误的地方插入它,所以要小心。
当您激活应用服务授权并忘记将您的移动客户端 url 从 http 更改为 https 时,可能会发生这种情况。 如果是这样,您的 http Post 将被重定向到 https url 但带有 Get 消息。 感谢 Fiddler 找到它。
如果 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