[英]GET requests work but POST requests 404 in Web API 2
我有一个使用MVC 5和Web API 2的项目。在本地,对Web API控制器的HTTP GET和POST请求都有效。 将网站发布并部署到外部环境后,GET请求仍然有效,但POST请求的结果为404。
这是我的API控制器:
public class ExampleApiController : ApiController
{
[HttpPost]
[Route("GetRoles")]
public IHttpActionResult GetRoles([FromBody] string userName)
{
// ...
return Json(response);
}
[HttpGet]
[Route("GetUsers")]
public HttpResponseMessage GetUsers()
{
HttpResponseMessage response;
// ...
return response;
}
}
这是我的WebApiConfig.cs
文件:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.Routes.MapHttpRoute(
name: "Web API default route",
routeTemplate: "api/{controller}/{action}",
defaults: null
);
}
}
这是我的Global.asax
文件:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
其他注意事项:
我将以下代码添加到Web.config
:
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
我将应用程序部署到的环境具有需要身份验证的子域(例如,URL看起来像http://qa.example.com
)。 我正在使用(例如) http://username:password@qa.example.com/GetUsers
。
RoutePrefix
属性。 有任何想法吗?
该问题已解决-对将来的读者没有太大帮助,但该问题与服务器端的第三方安全客户端有关,该客户端专门阻止了该请求。 朱利安诺的评论帮助我实现了这一目标。
我建议使用Web API文档(帮助页面)或大摇大摆地检查您的Web api方法的实际URL和参数。 你必须错过一些东西。
几天前,我遇到了类似的问题(post方法在本地运行,但在QA env上不工作),但是那一次我遇到405错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.