不区分url Path中的Action名称 - asp.net web api

时间:2017-02-14 15:49:13

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

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

2 个答案:

答案 0 :(得分:2)

Routetemplate应为

routeTemplate:“api / {controller} / {action} / {id}”

答案 1 :(得分:0)

WebApi遵循REST主体,因此它不会以与MVC控制器路由相同的方式进行路由。

在这里查看这个答案,我认为它会对你有帮助

need route for my web api 2 controller