在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”
答
尝试路由更改为匹配默认路由和路由只能通过如下属性:
//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
}
}
}
你正在使用哪个版本的Asp.Net? – Nikolaus
v4.0.30319 @Nikolaus – andrewb
您的控制器上是否有路由属性? – Nikolaus