【问题标题】:ASP.NET MVC simplify routingASP.NET MVC 简化路由
【发布时间】:2013-11-08 18:55:50
【问题描述】:

如何简化这些路线?

config.Routes.MapHttpRoute(
    name: "GetUsersRoute",
    routeTemplate: "api/User",
    defaults: new { controller = "User", action = "GetUsers" }
);

config.Routes.MapHttpRoute(
    name: "GetUserRoute",
    routeTemplate: "api/User/{id}",
    defaults: new { controller = "User", action = "GetUser", id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
    name: "GetEmailAddressRoute",
    routeTemplate: "api/User/GetEmailAddress/{id}",
    defaults: new { controller = "User", action="GetEmailAddress", id = RouteParameter.Optional }
);


/*** Default ***/
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

我需要添加 GetEmailAddressRoute,因为控制器不知道对像 api/User/5 这样的路径采取什么操作。但是,从那时起,api/User 等以前的路线并没有导致正确的操作。

来自控制器的一些动作签名:

public Object GetUsers() { };

public Object GetUser(int id) { };

public HttpResponseMessage GetEmailAddress (int id) { };

但现在我需要为 Post 操作添加另一条路线。有没有更简单的方法?

更新:帮助我发布新用户的是从第一条路线中删除操作。现在是

config.Routes.MapHttpRoute(
    name: "GetUsersRoute",
    routeTemplate: "api/User",
    defaults: new { controller = "User" }
);

【问题讨论】:

  • 我认为您不需要其他路线来进行发布操作。我以前从未见过这样做过,除非您在其他地方发帖。尝试更改您的默认 routeTemplate: "api/{controller}/{action}/{id}"

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


【解决方案1】:

您可以利用 web api 2 附带的新路由属性功能:

[Route("api/User")]
public Object GetUsers() { };

[Route("api/User/{id}")]
public Object GetUser(int id) { };

[Route("api/User/GetEmailAddress/{id}")]
public HttpResponseMessage GetEmailAddress (int id) { };

【讨论】:

  • 你可以使用RoutePrefix来避免重复'api/User'
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多