我有一个使用 MVC 5 和 Web API 2 的项目。在本地,对 Web API Controller 的 HTTP GET 和 POST 请求都在工作。当网站发布并部署到外部环境时,GET 请求仍然有效,但 POST 请求导致 404。
这是我的 API Controller :
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);
}
}
一些其他注意事项:
- 我已验证客户端发出的 POST 请求格式正确。
我在
Web.config
中添加了以下代码:<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
我要将我的应用程序部署到的环境有一个需要身份验证的子域(例如,URL 类似于
http://qa.example.com
)。我正在使用(例如)http://username:password@qa.example.com/GetUsers
进行测试。- 我的 Controller 没有使用
RoutePrefix
属性。
有什么想法吗?
最佳答案
该问题已解决 - 对 future 的读者帮助不大,但该问题与服务器端的第三方安全客户端专门阻止请求有关。 Juliano's comment帮助我实现了这一目标。
关于c# - GET 请求有效,但 POST 请求在 Web API 2 中为 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004909/