【发布时间】:2012-03-21 09:55:55
【问题描述】:
给定这样的路由定义:
routes.MapHttpRoute(
name: "Categories",
routeTemplate: "{controller}/Categories/{entity}/{property}",
defaults: new { action = "Categories", entity = RouteParameter.Optional, property = "Name" }
);
还有一个这样声明的控制器动作:
public IEnumerable<Category> Categories(string property);
public IEnumerable<Category> Categories(string entity, string property);
意图是控制器代表一个特定的实体,它可以聚合其他实体。返回的 Categories 包含 groupby 和 count 属性。因此,如果控制器是 UserController 并且用户实体具有 Name 属性,您可以调用 User/Categories/Name 并获得显示不同名称的结果以及每个名称有多少个。
如果一个用户也有一个地址实体,并且它有一个邮政编码,我可以调用User/Categories/Address/ZipCode 并期望结果显示有多少用户住在哪个邮政编码。
这里的问题是string entity 参数是string 类型而不是Type 类型,所以我必须用代码弄脏我的操作,将其转换为表示实体的Type 实例,并抛出 if这是一个不正确的字符串。
我想要的是像这样声明我的第二个动作:
public IEnumerable<Category> Categories(Type entity, string property);
但是我需要使用自定义反序列化器反序列化字符串。我已经有自定义反序列化器又名MediaTypeFormatters,用于处理来自内容主体的内容。我的问题是,在这种情况下,源是 URI 参数而不是内容主体。
这导致了我的问题:
- MediaTypeFormatter 是否也适用于 URI 参数?
- 如果不是,我必须实现什么构造并连接如何实现我想要的?
【问题讨论】:
标签: c# .net url-routing asp.net-mvc-4 asp.net-web-api