【问题标题】:Not differentiating between Action names in url Path - asp.net web api不区分 url 路径中的操作名称 - asp.net web api
【发布时间】: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 }
            );
        }
    }

【问题讨论】:

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


【解决方案1】:

路由模板应该是

routeTemplate: "api/{controller}/{action}/{id}"

【讨论】:

    【解决方案2】:

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

    在此处查看此答案,我认为它会对您有所帮助

    need route for my web api 2 controller

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多