1

我怎样才能简化这些路线?

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

1 回答 1

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) { };
于 2013-11-08T10:50:29.423 回答