2014-01-05 6 views
0

Новое для MVC и шаблон API, знакомый с C#.Вложенные функции в контроллере

Простой новый проект WebAPI с простым контроллером. Url путь, как /api/Clients/1, есть ли способ сортировать гнездо контроллеров? Или выполните функцию в том же контроллере, следуя URL-адресу, подобному этому: /api/Clients/1/Sysinfo/typeOf?

У меня есть модель Client, которая содержит свойства, которые являются объектами sysinfo./api/Clients/1 возвращает все свойства объекта Client с идентификатором 1. Я хочу, например, указать только определенные элементы, возвращенные с помощью/api/Clients/1/Sysinfo/RAM.


@Joachim Rosskopf Я попробовал этот подход. Это приводит к 404./clients/1/works./clients/1/sysinfo не работает.

Используя следующие маршруты:

 routes.MapRoute(
      name: "Sysinfo", 
      url: "Clients/{id}/Sysinfo/{type}", 
      defaults: new { controller = "Sysinfo", type = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Создано новый контроллер SysinfoController:

public class SysinfoController : ApiController 
{ 
    public Sysinfo GetAllSysinfoItems() 
    { 
     return new Sysinfo { Id = 1, RAM = "1GB" }; 
    } 

    public IHttpActionResult GetSysinfoByType(int id) 
    { 
     return Ok(); 
    } 
} 
+0

Вы имеете в виду, что хотите обрабатывать * оба типа этих URL-адресов? – James

+0

Эта ссылка на контроллеры и маршрутизацию может помочь: http://www.asp.net/mvc/overview/controllers-and-routing – Markus

+0

Да, действительно. Как сказано, я новичок в MVC, это просто логическая ошибка. У меня есть модель Client, которая содержит свойства, которые являются элементами sysinfo./api/Clients/1 возвращает все свойства объекта Client с идентификатором 1. Я хочу, например, указать только определенные элементы, возвращенные с помощью/api/Clients/1/Sysinfo/RAM. – z7gsr32cod586mic4a5e

ответ

0

Вы должны настроить конфигурацию маршрутизации и добавлять специальные записи для детей маршрутов. Важно, чтобы добавить наиболее специфический маршрут первый:

routes.MapHttpRoute(
     name: "SysInfoApi", 
     routeTemplate: "api/Clients/{id}/Sysinfo/{param}", 
     defaults: new { controller = "SysInfo", param = RouteParameter.Optional } 
); 

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

В приведенных выше примере есть конкретный маршрут для SysInfo контроллера, который обрабатывает вложенный ресурс. Как и маршрут по умолчанию.

SysInfo контроллер с действиями для GET -requests может выглядеть следующим

public class SysInfoController : ApiController 
{ 
    // GET api/client/{id}/sysinfo/ 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // GET api/client/{id}/sysinfo/{param} 
    public string Get(int id, string param) 
    { 
     return "value"; 
    } 
} 

Я не знаю способа обрабатывать иерархические RESSOURCES в WebAPI автоматически.

+0

Обновлено FP! Thx заранее! – z7gsr32cod586mic4a5e

+0

Добавлен пример SysInfoController для ответа. –

Смежные вопросы