Skip to main content
 首页 » 编程设计

c#之GET 请求有效,但 POST 请求在 Web API 2 中为 404

2024年01月13日27unruledboy

我有一个使用 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帮助我实现了这一目标。