在webapi控制器中有多个动作

问题描述:

我有一个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

尝试路由更改为匹配默认路由和路由只能通过如下属性:

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