在webapi控制器中有多个操作

时间:2017-10-21 12:33:42

标签: c# asp.net-web-api

我有一个web api控制器,直到现在它只有一个动作,一切正常。我试图添加第二个动作,我无法让它可以访问。

以下是工作操作的方法主体的方法签名和剪辑:

[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"
    );
}

有趣的是我的其他行动,正在运作的行动,可以通过

访问
  
    

数据/添加

  

这似乎与路由相矛盾。

编辑:我从邮递员那里得到的消息是

  
    

未找到与请求URI“http://localhost:62243/data/check

匹配的HTTP资源   

1 个答案:

答案 0 :(得分: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
       }
    }

}