0

Я хотел бы использовать WebAPI подвергать иерархическую структуру ключ-значение данных, как это:Неограниченные иерархические маршруты

http://www.whatever.com/api/root/level1/level2/leveln 

Возможно ли это с WebAPI? И если да, то как?

+0

да возможно :) –

+0

Спасибо, очень полезно: D (вопрос отредактирован) – ConditionRacer

ответ

1

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

Чтобы отобразить неограниченный иерархический маршрут, я сопоставлял все после /api/root/ с одной переменной, а затем явно анализировал и интерпретировал этот метод в пользовательской логике вашего контроллера или выделенный сервис.

Хитрость, имеющий матч включают прямую косую черту, чтобы добавить * в начале:

config.Routes.MapHttpRoute(
    name: "KeyValueHierarchy", 
    routeTemplate: "api/test/root/{*keyLevels}", 
    defaults: new { controller = "Hierarchy" } 
); 

Затем в контроллере

public class HierarchyController : ApiController 
{ 

    public IHttpActionResult Get(string keyLevels) 
    { 
     var keys = keyLevels.Split('/'); 

     // ... do stuff with your keys 

     return Ok(keys); 
    } 

} 

Быстрый тест:

GET /api/test/root/foo/5/bar/10/foobar

возвращение:

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <string>foo</string> 
    <string>5</string> 
    <string>bar</string> 
    <string>10</string> 
    <string>foobar</string> 
</ArrayOfstring> 
Смежные вопросы