2013-09-23 2 views
1

Я пытаюсь сопоставить /{Controller}/{Variable1}/{Variable2}/{Variable3} к методу GET в контроллеречтения Asp.Net Web API значения GET из URL

public TestController{ 

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

} 

Так мне нужно отобразить переменные объекта.

Для того, чтобы поместить его в пример

/Продукт/{категория}/{filter1}/{filter2}/

Entity

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, а не контроллер, которым я был раньше.

ответ

0

В принципе, вы не сможете это сделать. Сложные типы несовместимы с механизмом маршрутизации.

Прочитать статью this. Но этот параграф объясняет, почему механизм маршрутизации не может делать то, что вы просите.

Сложный тип может связываться только с URI посредством пользовательской привязки. Но в этом случае структура не может заранее знать, будет ли параметр привязываться к определенному URI. Чтобы узнать, для вызова привязки потребуется . Цель алгоритма выбора: выбрать действие из статического описания, прежде чем вызывать привязки . Поэтому комплексные типы исключаются из алгоритма соответствия .

Поэтому основное правило:

Для каждого параметра действия, если параметр берется из URI, то имя параметра должно быть найдено ни в словаре маршрут или строка запроса URI. (Дополнительные параметры и параметры со сложными типами исключаются.)

означает, что вы должны определить свои действия, например, так:

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

И шаблон маршрута:

/{controller}/{category}/{filter1}/{filter2}/ 
Смежные вопросы