我已经实现了控制台自托管的WebAPI应用程序。
我的控制器适用于单个get和post方法。
我无法了解如何在ApiController中实现多个get和post方法
Startup.cs
class Startup
{
public void Configuration(IAppBuilder app)
{
// Initialize WebAPI
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "apiRoute",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseWebApi(config);
// Initialize SignalR
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
运行良好的ApiController
public class MessageController : ApiControllerWithHub<SignalMessageHub>
{
public IEnumerable<MyItem> GetMessages()
{
//Code
}
public HttpResponseMessage PostNewMessage(User user)
{
// code
}
}
不起作用的ApiController
public class MessageController : ApiControllerWithHub<SignalMessageHub>
{
public IEnumerable<MyItem> GetMessages()
{
//Code
}
// Cannot route to those methods
[HttpPost()]
[Route("api/Message/NewMessage")]
public HttpResponseMessage PostNewMessage(User user)
{
// code
}
[HttpPost()]
[Route("api/Message/NewMessage2")]
public HttpResponseMessage PostNewMessage2(User user)
{
// code
}
}
答案 0 :(得分:4)
您的问题与您的路由有关。 这里
routeTemplate: "api/{controller}/{id}",
您尚未添加&#34; {action}&#34;因此,在将此更改为此之前,您无法获取操作:
routeTemplate: "api/{controller}/{action}/{id}",
此外,您已添加&#34; api / Message&#34;到控制器中的Action路由,这将使您的路由类似于:
api/{controller}/{action}/api/Message/NewMessage
所以你也需要删除它。