2017-10-21 28 views
0

我有一個web api控制器,直到現在它只有一個動作,一切正常。我試圖添加第二個動作,但無法使其可以訪問。在webapi控制器中有多個動作

這裏是工作的行動方法簽名和方法體的剪斷,因爲我遇到的麻煩的動作

[Route("data/add")] 
[HttpPost] 
public HttpResponseMessage Add(Message item) 
{ 
    using(var ctx = new dbContext()) 
    { 
     // add new message using EF. snip 
    } 
} 

我的方法簽名和方法體的剪斷的是:

[Route("data/check")] 
[HttpPost] 
public HttpResponseMessage Check(DateTime date) 
{ 
    using (var ctx = new dbContext()) 
    { 
     // check if any messages after param date 
     // snip 
    } 
} 

這裏是我的路由配置。

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
    config.Routes.MapHttpRoute(
     name: "Notification", 
     routeTemplate: "{controller}/check" 
    ); 
} 

有趣的是我的其他行動,這是工作的人,可以通過

數據訪問/加

這似乎違背了路由。

編輯:我回來從郵差的信息是

沒有HTTP資源發現,請求URI「http://localhost:62243/data/check

+0

你正在使用哪個版本的Asp.Net? – Nikolaus

+0

v4.0.30319 @Nikolaus – andrewb

+0

您的控制器上是否有路由屬性? – Nikolaus

回答

0

嘗試路由更改爲匹配默認路由和路由只能通過如下屬性:

//Add this to your Controller 
[RoutePrefix("api/{controller}")] 
public class YourController:ApiController 
{ 
    //Whatever code 

    // Only part-route necessary. 
    [Route("add")] 
    [HttpPost] 
    public HttpResponseMessage Add(Message item) 
    { 
     using(var ctx = new dbContext()) 
     { 
      // add new message using EF. snip 
     } 
    } 

    // Like before 
    [Route("check")] 
    [HttpPost] 
    public HttpResponseMessage Check(DateTime date) 
    { 
     using (var ctx = new dbContext()) 
     { 
      // check if any messages after param date 
      // snip 
     } 
    } 

} 
+0

爲什麼你有爲Add方法定義的routeprefix,而不是Check? – andrewb

+0

我不明白:我有一個ControllerPrefix的RoutePrefix和兩個方法的RouteAttribute。 – Nikolaus

+0

@andrewb您是否設法解決您的問題? – Nikolaus