C# 不区分url路径中的操作名称-asp.net web api

C# 不区分url路径中的操作名称-asp.net web api,c#,asp.net-mvc,asp.net-web-api,routing,C#,Asp.net Mvc,Asp.net Web Api,Routing,在我的APIController中调用操作时,我遇到了非常奇怪的路由问题。我有一个WebApp,但需要一个APIController,所以我将它以及WebAPIConfig.cs添加到App\u start和Global.asax 但是,当我尝试在APIController中调用不同的操作时,除非添加参数,否则似乎无法区分操作。例如,如果我调用api/controller/happy,它将输入与api/controller/sad相同的Action。它输入首先在控制器中创建的操作 这对我来说毫无

在我的
APIController
中调用操作时,我遇到了非常奇怪的路由问题。我有一个WebApp,但需要一个
APIController
,所以我将它以及
WebAPIConfig.cs
添加到App\u start和
Global.asax

但是,当我尝试在
APIController
中调用不同的
操作时,除非添加参数,否则似乎无法区分
操作。例如,如果我调用
api/controller/happy
,它将输入与
api/controller/sad
相同的
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();
        }
    }
My RouteConfig(这是一个web应用程序,不是web API):


WebApi遵循REST原则,因此它的路由方式与MVC控制器的路由方式不同

看看这个答案,我想它会对你有所帮助


WebApi遵循REST原则,因此它的路由方式与MVC控制器的路由方式不同

看看这个答案,我想它会对你有所帮助


路由模板应为


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

routeTemplate应该是


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

看这里,看起来你的确切问题你的routeTemplate不包含操作,这里只有controllerSee,看起来你的确切问题你的routeTemplate不包含操作,只有控制器
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 }
            );
        }
    }
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 }
            );
        }
    }