[英]Custom routing in Web API 2. Failing to reach controller method
I have a method inside of my controller which I am trying to reach: 我想达到的控制器内部有一个方法:
[HttpPost, ActionName("UpdateTitle")]
public IHttpActionResult UpdateTitle(Guid playlistId, string title)
{
using (ITransaction transaction = Session.BeginTransaction())
{
PlaylistManager.UpdateTitle(playlistId, title);
transaction.Commit();
}
return Ok();
}
I have another method in the controller which is also a POST and is the method which is actually being hit by my request (erroneously): 我在控制器中还有另一个方法,这也是一个POST,实际上是我的请求(错误地)击中的方法:
[HttpPost]
public PlaylistDto Create(PlaylistDto playlistDto)
Here's what my raw request information looks like: 我的原始请求信息如下所示:
Here's my routing: 这是我的路线:
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 }
);
}
}
Why on earth is it redirecting to the Create method? 为什么到底重定向到Create方法? The signature looks correct to me for being routed to the UpdateTitle method.
对于我来说,该签名对于路由到UpdateTitle方法而言是正确的。
First you need to create a class that contains all your form data. 首先,您需要创建一个包含所有表单数据的类。 You may be able to use your PlaylistDto class for this:
您可以为此使用PlaylistDto类:
public class PlaylistDto
{
public Guid PlaylistId { get; set; }
public string title { get; set; }
}
Then change your UpdateTitle method to: 然后将您的UpdateTitle方法更改为:
[HttpPost, ActionName("UpdateTitle")]
public IHttpActionResult UpdateTitle(PlaylistDto Dto)
{
using (ITransaction transaction = Session.BeginTransaction())
{
PlaylistManager.UpdateTitle(Dto.playlistId, Dto.title);
transaction.Commit();
}
return Ok();
}
Finally change your routing as follows: 最后,如下更改路由:
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 }
);
}
}
尝试这样声明,看看是否有帮助(因为我相信您是在请求的正文中发送参数:
public IHttpActionResult UpdateTitle([FromBody]Guid playlistId, [FromBody]string title)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.