Skip to main content
 首页 » 编程设计

c#之自托管 WebAPI 和多种 post 和 get 方法

2024年02月04日34JustinYoung

我已经实现了控制台自托管 WebAPI 应用程序。

我的 Controller 适用于单个 get 和 post 方法。

我不知道如何在 ApiController 中实现多个 get 和 posts 方法

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   
   } 
 
} 

请您参考如下方法:

你的问题出在你的路由上。 这里

routeTemplate: "api/{controller}/{id}", 

您尚未添加“{action}”,因此在将其更改为此之前您无法获取操作:

routeTemplate: "api/{controller}/{action}/{id}", 

您还向 Controller 中的 Action 路由添加了“api/Message”,这将使您的路由类似于:

api/{controller}/{action}/api/Message/NewMessage 

所以你也需要删除它。