2017-07-25 76 views
1

我已经实现了控制台自托管的WebAPI应用程序。自己托管的WebAPI和多个post和get方法

我的控制器适用于单个获取和发布方法。

我不能怎么implementg多个GET和职位方法ApiController

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 
    } 

} 
+2

尝试将此路由从此routeTemplate:“api/{controller}/{id}”,转换为routeTemplate:“api/{controller}/{action}/{id}”,并移除api/Message',那么你应该可以把它们放在''api/Message/NewMessage'' –

+1

@Dimi对不起,在编辑之前发布! Samvel的回答看起来不错。 – garethb

回答

4

你的问题是你的路由。 这里

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

你还没有加入“{}行动”,所以你不能让操作直到这个改成这样:

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

而且您已经添加“API /消息”的操作的控制器路由,这将使你的路由是这样的:

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

所以你还需要将其删除。