自托管WebAPI和多个post和get方法

时间:2017-07-25 06:46:04

标签: c# asp.net-web-api http-post

我已经实现了控制台自托管的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  
   }

}

1 个答案:

答案 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

所以你也需要删除它。