在where: c.amount > 100
中调用操作时,我遇到了非常奇怪的路由问题。我有一个WebApp,但需要APIController
,所以我将APIController
添加到App_start和WebAPIConfig.cs
。
但是,当我尝试在Global.asax
内调用不同的Actions
时,除非我添加参数,否则似乎无法区分APIController
。例如,如果我拨打Actions
,则会输入与api/controller/happy
相同的Action
。它进入首先在Controller中创建的Action。
对我来说没有意义,URL中没有考虑动作名称。
我的API控制器:
api/controller/sad
我的WebAPIConfig.cs:
public class RegistrationManagerController : ApiController
{
EventHelper eh = new EventHelper();
[HttpGet]
public IHttpActionResult IsUserRegistered(string skypeid)
{
var skypeuser = Exist.CheckIfRegistered(skypeid);
return Ok(skypeuser);
}
[HttpGet]
public async Task<IHttpActionResult> Happy()
{
var events = await eh.GetHappyRecent();
return Ok(events);
}
[HttpGet]
public async Task<IHttpActionResult> Sad()
{
var events = await eh.GetSadRecent();
return Ok(events);
}
[HttpPost]
public async Task<IHttpActionResult> UpdateEvent() //TODO id send in body?
{
await eh.Update("id");
return Ok();
}
}
我的RouteConfig(这是一个webapp,而不是一个Web API):
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
答案 0 :(得分:2)
Routetemplate应为
routeTemplate:“api / {controller} / {action} / {id}”
答案 1 :(得分:0)
WebApi遵循REST主体,因此它不会以与MVC控制器路由相同的方式进行路由。
在这里查看这个答案,我认为它会对你有帮助