我想在控制器内部使用一种方法:
[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方法。
答案 0 :(得分:1)
首先,您需要创建一个包含所有表单数据的类。您可以使用PlaylistDto类:
public class PlaylistDto
{
public Guid PlaylistId { get; set; }
public string title { get; set; }
}
然后将UpdateTitle方法更改为:
[HttpPost, ActionName("UpdateTitle")]
public IHttpActionResult UpdateTitle(PlaylistDto Dto)
{
using (ITransaction transaction = Session.BeginTransaction())
{
PlaylistManager.UpdateTitle(Dto.playlistId, Dto.title);
transaction.Commit();
}
return Ok();
}
最后更改您的路由,如下所示:
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(
name: "UpdateTitle",
routeTemplate: "Playlist/UpdateTitle",
defaults: new { controller = "PlaylistController", action = "UpdateTitle" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
答案 1 :(得分:0)
尝试声明这样,看看是否有帮助(因为我相信你在请求正文中发送参数:
public IHttpActionResult UpdateTitle([FromBody]Guid playlistId, [FromBody]string title)