【发布时间】:2017-07-02 23:59:08
【问题描述】:
在我的 APIController 中调用操作时,我遇到了非常奇怪的路由问题。我有一个 WebApp,但需要一个 APIController,所以我将它以及 WebAPIConfig.cs 添加到 App_start 和 Global.asax。
但是,当我尝试在 APIController 中调用不同的 Actions 时,除非我添加参数,否则似乎无法区分 Actions。例如,如果我调用api/controller/happy,它会输入与api/controller/sad 相同的Action。它进入了在Controller中首先创建的Action。
这对我来说毫无意义,URL 中没有考虑动作名称。
我的 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(这是一个 webapp,不是 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 }
);
}
}
【问题讨论】:
-
看这里,看起来像你的问题stackoverflow.com/questions/10121152/…
-
你的路由模板不包含动作,只是控制器
标签: c# asp.net-mvc asp.net-web-api routing