我正在尝试将/{Controller}/{Variable1}/{Variable2}/{Variable3}
映射到控制器中的GET方法
public TestController{
public ActionResult Get([FromUrl] Entity instance){}
}
所以我需要将变量映射到实体。
把它放到一个例子中
/产品/ {类别} / {过滤器1} / {过滤器2} /
实体
public class ProductSearchRequest
{
public string Category{get;set;}
public string filter1 {get;set;}
public string filter2 {get;set;}
}
控制器
public ProductController: Controller {
public ActionResult GET([FromUri] ProductSearchRequest productSearchRequest){
}
}
[EDITED]
必须进行以下更改才能实现此功能
而不是RouteCollection.MapHttpRoute使用HttpConfiguration.Routes.MapHttpRoute,因为这是API路由而不是MVC路由。
从ApiController继承控制器,而不是以前的Controller。
答案 0 :(得分:0)
基本上你无法做到这一点。复杂类型与路由机制不兼容。
阅读this文章。但是这一段解释了为什么路由机制不能满足你的要求。
复杂类型只能通过自定义绑定绑定到URI。但 在那种情况下,框架无法事先知道是否 参数将绑定到特定的URI。要找出它,它需要 调用绑定。选择算法的目标是 在调用any之前,从静态描述中选择一个动作 绑定。因此,从匹配中排除复杂类型 算法
因此基本规则是:
对于动作的每个参数,如果参数取自 URI,然后必须在路由中找到参数名称 字典或URI查询字符串。 (可选参数和 排除复杂类型的参数。)
这意味着你需要像这样定义你的行动:
public ActionResult GET(string Category, string filter1, string filter2){
}
您的路线模板:
/{controller}/{category}/{filter1}/{filter2}/