1

我正在尝试映射/{Controller}/{Variable1}/{Variable2}/{Variable3}到控制器中的 GET 方法

public TestController{

public ActionResult Get([FromUrl] Entity instance){}

}

所以我需要将变量映射到实体。

举个例子

/产品/{类别}/{filter1}/{filter2}/

实体

 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){

}

}

[编辑]

必须进行以下更改才能使其正常工作

而不是 RouteCollection.MapHttpRoute 使用 HttpConfiguration.Routes.MapHttpRoute 因为这是 API 路由而不是 MVC 路由。

从 ApiController 继承控制器,而不是我之前的 Controller。

4

1 回答 1

0

基本上你将无法做到这一点。复杂类型与路由机制不兼容。

阅读这篇文章。但是这一段解释了为什么路由机制不能做你所要求的。

复杂类型只能通过自定义绑定绑定到 URI。但在这种情况下,框架无法提前知道参数是否会绑定到特定的 URI。要找出答案,它需要调用绑定。选择算法的目标是在调用任何绑定之前从静态描述中选择一个动作。因此,复杂类型被排除在匹配算法之外。

因此,基本规则是:

对于操作的每个参数,如果参数取自 URI,则必须在路由字典或 URI 查询字符串中找到参数名称。(不包括可选参数和复杂类型的参数。)

这意味着您需要像这样定义您的操作:

public ActionResult GET(string Category, string filter1, string filter2){
}

还有你的路线模板:

/{controller}/{category}/{filter1}/{filter2}/
于 2013-09-23T11:31:57.663 回答