我在调用APIController
中的动作时遇到了很奇怪的路由问题。我有一个WebApp,但需要一个APIController
,所以我在App_start和Global.asax
中加入了WebAPIConfig.cs
。不区分URL中的操作名称路径 - asp.net web api
但是,当我尝试在APIController
内部调用不同的Actions
时,除非添加参数,否则似乎不区分Actions
。例如,如果我拨打api/controller/happy
,它将输入与相同的Action
。它输入在Controller中首先创建的Action。
对我来说这没有意义,在URL中没有考虑Action-names。
我的API控制器:
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();
}
}
我WebAPIConfig.cs:
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 }
);
}
}
我RouteConfig(这是一个Web应用,而非网络API):
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();// New feature
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
看到这里,看起来像你的确切问题http://stackoverflow.com/questions/10121152/api-controller-declaring-more-than-one-get-statement –
你的routetemplate不包含行动,只是控制器 – Dexion