2017-07-25 78 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 

所以你還需要將其刪除。