【发布时间】:2014-03-11 18:02:00
【问题描述】:
我的控制器内部有一个方法,我正在尝试访问:
[HttpPost, ActionName("UpdateTitle")]
public IHttpActionResult UpdateTitle(Guid playlistId, string title)
{
using (ITransaction transaction = Session.BeginTransaction())
{
PlaylistManager.UpdateTitle(playlistId, title);
transaction.Commit();
}
return Ok();
}
我在控制器中有另一种方法,它也是一个 POST,它实际上是被我的请求(错误地)命中的方法:
[HttpPost]
public PlaylistDto Create(PlaylistDto playlistDto)
我的原始请求信息如下所示:
这是我的路线:
public static class WebApiConfig
{
// TODO: Create test cases for custom routing.
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Routes.MapHttpRoute("UpdateTitle", "Playlist/UpdateTitle/{playlistId}/{title}");
// TODO: What does this do?
// Web API routes
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
到底为什么它会重定向到 Create 方法?签名在我看来是正确的,因为它被路由到了 UpdateTitle 方法。
【问题讨论】:
-
MapHttpAttributeRoutes 是开启属性路由。看看这里asp.net/web-api/overview/web-api-routing-and-actions/… 并尝试getglimpse.com 以满足您的路线调试和许多其他需求。
-
我看不到图像(是的,imgur 被公司代理阻止:-/),但就路由映射器而言,您的路由配置未考虑操作, 两种方法都有相同的路线。
-
不。问题绝对是您不能在正文中为 Web API 发布多个参数。违背了他们的规则。应该是 PATCHing,重新设计我的架构,这样我就可以进行更新,或者别的什么。
标签: c# asp.net-web-api-routing asp.net-web-api2