Bud*_*Joe 2 asp.net-mvc asp.net-mvc-4 asp.net-web-api
我有一个用ASP.NET MVC 4框架编写的Web服务.它的基本CRUD操作很好地映射到REST动词,但是我需要添加一个不需要的动作.
指定有时在URL结尾处传递ID的正确方法是什么,你知道它将是一个Integer类型,有时候它是一个"action"一个String类型后跟一个斜杠和一个int ID?需要帮助正确的路由器地图.
思考?注意:我更关注WebAPI然后是100%REST.
示例网址
//获取小部件列表
http://somedomain.com/api/widget
//获取特定小部件
http://somedomain.com/api/widget/1
// POST - 对特定小部件采取特殊操作 - 提升
http://somedomain.com/api/widget/promote/1
这是处理它的正确方法吗?
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApiExtended",
routeTemplate: "api/{controller}/{action}/{id}"
);
Run Code Online (Sandbox Code Playgroud)
我尝试将第二个模式(一个"动作",一个字符串类型,后跟一个斜杠和一个int ID)放在一个更高的优先级(在URL的末尾传递一个你知道将是一个整数类型的ID).
routes.MapHttpRoute(
name: "ActionWithId",
routeTemplate: "api/widget/{action}/{id}"
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
您的操作和ID不是可选的,因为您总是期待它们.如果没有匹配,DefaultApi规则应该接管处理.
编辑:
想一想,如果你确实希望它是"RESTy",那么你总是可以切换ID,所以对于这个小部件,使用这个id,执行这个动作.
routes.MapHttpRoute(
name: "ActionWithId",
routeTemplate: "api/widget/{id}/{action}"
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |