我有一个使用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
属性。有什么想法吗?
答案 0 :(得分:0)
问题已得到解决 - 对未来的读者来说并不是非常有用,但问题与服务器端的第三方安全客户端有关,特别是阻止请求。 Juliano's comment帮助我实现了这一目标。
答案 1 :(得分:-2)
我建议使用网络API文档(帮助页面)或招摇来检查您的网络API方法实际网址和参数。你必须遗漏一些东西。
前几天我遇到了类似的问题(post方法在本地工作,但没有在QA env上工作)但那次我得到405错误