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

标签 c# asp.net asp.net-mvc iis asp.net-web-api2

我有一个使用 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/

相关文章:

c# - 单元测试 HtmlHelper 扩展方法失败

c# - 返回值是 IEnumerable 而不是 IPaged

c# - DotNetOpenAuth 的 DesktopConsumer ProcessUserAuthorization 中的验证器是什么?

html - 在 ASP.NET MVC 中处理可变数量的动态输入字段?

返回语句后的 C# 触发事件

c# - azure "The remote server returned an error: (530) Not logged in."

c# - MVC WebAPI 返回多个图像

c# - 使用 XPathEvaluate 获取 Linq-to-Xml 查询中的文本节点值

c# - 您是否有 Visual Studio 2008 和 C# 的引用问题?

javascript - 如何在mozilla firefox浏览器中使用javascript/asp.net刷新父页面