为什么我的 Web Api 2 Post 方法没有命中?

Why is my Web Api 2 Post method not hit?

在我的 apicontroller 中,我有 2 个方法可以处理 Post 请求:

public WatchListItemDTO Post(MovieDto movie)
{
    //do smt..
}

[HttpPost]
[Route("MarkMovieAsWatched/{id}")]
public void MarkMovieAsWatched(int id)
{
    // do smt..
}

控制器有前缀属性:[RoutePrefix("api/DownloadList")]。当我向 http://localhost:4229/api/DownloadList/MarkMovieAsWatched/ 发出 (post) 请求时,它会触发我的 Post 方法。该请求还包含一个对象:{id: 12}.

我的WebApiConfig:

public static void Register(HttpConfiguration config)
{
    config.EnableCors();

    config.MapHttpAttributeRoutes();

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

    // To disable tracing in your application, please comment out or remove the following line of code
    // For more information, refer to: http://www.asp.net/web-api
    config.EnableSystemDiagnosticsTracing();
}

有人可以向我解释为什么方法 MarkMovieAsWatched 没有命中吗?以及如何解决这个问题?

可能是您的路线需要一个 id 作为路线的一部分。

尝试将您的属性更改为:

[Route("MarkMovieAsWatched/{id?}")]

这样,如果您不将 id 作为路径的一部分传递,路由仍然是有效的匹配项。