【问题标题】:WebApi does not accept post (404 error)WebApi 不接受帖子(404 错误)
【发布时间】:2013-01-29 13:12:22
【问题描述】:

我有一个启用了 WebAPI 的 MVC4 Web 项目。

我想将数据发布到 API 控制器,但发布不工作,我每次都收到 404(未命中 Add 方法内的断点)....

代码如下:

public class IncidentSessionLogController : ApiController
{
   [HttpPost]
   public void Add(MyInputDTO inputData)
   {
   }
}

我使用基于动作的路由:

public static void Register(HttpConfiguration config)
{
   config.Routes.MapHttpRoute(
       name: "ControllerAndAction",
       routeTemplate: "api/{controller}/{action}");

   config.Routes.MapHttpRoute(
       name: "ControllerAndActionAndId",
       routeTemplate: "api/{controller}/{action}/{id}",
       defaults: new { id = RouteParameter.Optional });
}

我使用 Fiddler 发布数据:

http://localhost:42901/api/IncidentSessionLog/Add

我的网站目前托管在 IIS express 中进行开发,我在 Fiddler 的请求正文中添加 JSON 对象文字。

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api asp.net-mvc-routing


    【解决方案1】:

    已修复,感谢我的同事!

    MVC 路由(我最初忘记发布了)干扰了 API 路由,所以我必须为 MVC 路由添加一个约束:

    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Game", action = "Start", id = UrlParameter.Optional },
                    constraints: new { controller = @"^((?!(api)).)*$" });
    

    【讨论】:

    • 是的,这样就可以了 :)。您也可以选择在 MVC 路由之前注册 WebAPI 路由。然后,您甚至不需要约束,因为路由是使用它们的顺序匹配的。
    猜你喜欢
    • 2018-04-23
    • 2013-02-03
    • 2014-01-04
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多