web api 似乎只适用于标准用例。但我想做更复杂的路由,但找不到复杂路由的文档。如果我有更多控制器,路由会变得越来越复杂。
我可以定义几个具有依赖关系的可选参数吗?像这样:
/api/document/{par1}/{par2}
par1 & par2 应该是可选的,但 par2 只有在 par1 存在时才应该匹配。
递归参数是否可能?
/api/documents/characteristics/{round/green/red-dots}
/api/documents/characteristics/{square/yellow}
/api/documents/characteristics/{square/yellow/flat}
/api/documents/characteristics/{square/yellow/flat/...}
是否有关于 web api 路由的详细文档?微软教程太基础了……我需要更多关于路由的信息。
我有两个控制器和一些麻烦,因为两个路由非常相似,所以走错了路线。我可以使用 [Action]-Attribute 作为解决方法,但这感觉不对……我还必须考虑路线的顺序。这是合乎逻辑的,但没有提到。web api是否仅适用于简单的rest api?
编辑: 我试过这个:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/documents/{id}",
defaults: new { controller = "documents", id = RouteParameter.Optional }
);
//routes.MapHttpRoute(
// name: "DefaultApiWithAction",
// routeTemplate: "api/{mandant}/documents/{id}/{action}",
// defaults: new { controller = "documents" }
// );
我有两种方法:
[AcceptVerbs("get")]
public HttpResponseMessage Get(int id)
[ActionName("file")]
[AcceptVerbs("get")]
public HttpResponseMessage filedownload(int id)
现在我遇到了问题,即使我注释掉第二条路线也会触发文件操作,并且不会触发正常的获取特定文档方法,因为多个操作...我尝试了 [NoAction] 属性,但这不起作用.. . 但是为什么route-template中没有action会触发file-method呢?(或者如果第二条路由处于活动状态,如果url中没有任何操作,为什么不会触发正常的get-document方法......)我目前的解决方法是为所有其他方法设置默认操作,但是这不是一个好的解决方案。