这样风格的API,我想一个REST被命名后来才知道我是如何处理重复的动作名称
在一个REST风格的API,你不应该处理这样的重复。在REST风格的API中,您正在处理资源。
所以在您的特定情况下,你有2个资源:
所以,你将有以下途径:
/users/{userId}/schoolyears
- >它对应于你的第一个动作
/shoolyears/{id}
- >这相当于你的第二个动作
所以:
public class UsersController : ApiController
{
public SchoolyearBrowseResponse GetSchoolYears(int userId)
{
return _service.GetSchoolyears(userId);
}
}
和:
public class SchoolYearsController : ApiController
{
public SchoolyearOpenResponse Get(int id)
{
return _service.OpenSchoolyear(id);
}
}
和最后一步是你的路线:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "UserSchoolYears",
routeTemplate: "api/{controller}/{userId}/schoolyears",
defaults: new { controller = "Users", action = "GetSchoolYears" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
由于我想提一下附注一个用户的学年(你的SchoolyearBrowseResponse
)班难以奏效。通常对于给定的用户,你有一个学年的列表。如果你想为一个用户获得一个特定的学年,你可以使用/users/{userId}/schoolyears/{schoolyearid}
。
“通常对于给定的用户,你有一个学年列表”但我的SchoolyearBrowseResponse班内有List。这有道理吗?或者我还没有理解你... –
HelloWorld
是的,这是有道理的。 –
再次感谢Darin,我喜欢你的回答,它真的很有帮助:) – HelloWorld