2015-04-17 4 views
1

у меня есть один апите контроллер с двумя различными путями:Web на основе различных маршрутов

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

     config.Routes.MapHttpRoute(
      name: "downloadApi", 
      routeTemplate: "api/{controller}/{download}/{id}" 
      ); 

Я хочу, чтобы эти действия с этими маршрутами:

1 - для загрузки файла: общественный GetFile()

GET /api/v1/documents/download/id 

2 - Для получения информации о файле: общественный GetFileInfo()

GET /api/v1/documents/id 

Так в мой контроллер я хочу, чтобы эти действия:

public class DocumentsController : apiController 
{ 
    // triggers with GET /api/v1/documents/download/id 
    public HttpResponseMessage GetFile(){} 

    // triggers with GET /api/v1/documents/id 
    public HttpResponseMessage GetFileInfo(){} 
} 

Как я могу это сделать?

Thanks

+0

Я считаю, что вы должны сделать это с помощью атрибутов методы, которые определяют маршрут для каждого метода. –

ответ

2

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

public class DocumentsController : apiController 
{ 
    // triggers with GET /api/v1/documents/download/id 
    [HttpGet] 
    [Route("api/v1/documents/download/{id}")] 
    public HttpResponseMessage GetFile(int id){} 

    // triggers with GET /api/v1/documents/id 
    [HttpGet] 
    [Route("api/v1/documents/{id}")] 
    public HttpResponseMessage GetFileInfo(int id){} 
} 

непроверенные, но он должен работать

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