0

Я использую веб-интерфейс для списка сказок, и я хочу сделать это:Asp.Net Mvc Web Api маршрутизация вопрос

  1. Список GetAllTales() = апите/сказки/
  2. Tale GetTale (интермедиат идентификатор) = апи/сказки/1
  3. Список GetAllTalesByCategory (строка CategoryName) = API/рассказы/дети
  4. Tale GetTalesByCategoryAndId (строка CategoryName, внутр идентификатор) = API/байки/дети/1

я nt знать, что может это сделать или что я могу изменить в конфигурации маршрута?

Мои TalesController: ApiController

public IEnumerable<Tale> GetAllTales() 
    { 
     return TaleService.FindAllTale(); 
    } 
public IEnumerable<Tale> GetAllTalesByCategory(string categoryName){} 

    public Tale GetTale(int id) 
    { 
     Tale item = TaleService.FindByTaleId(id); 
     if (item == null) 
     { 
      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 
     } 

     return item; 
    } 

Его мой WebApiConfig

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { id = @"^[0-9]+$" } 
     ); 

     config.Routes.MapHttpRoute(
      name: "ApiByName", 
      routeTemplate: "api/{controller}/{name}", 
      defaults: null, 
      constraints: new { name = @"^[a-z]+$" } 
     ); 

Некоторые примеры для своей цели: http://www.bbc.com/news/ - http://www.bbc.co.uk/news/technology/

ответ

0

использовать атрибуты [HttpPost] и [HttpGet] и указать имя действия с [ActionName("Your Action Name")]

// api/tales/getall 
[HttpGet] 
[ActionName("getall")] 
public IEnumerable<Tale> GetAllTales() 
{ 
    return TaleService.FindAllTale(); 
} 

вот так вы можете украсить все действия соответствующими атрибутами, чтобы заставить его работать как ожидалось.

Редактировать

Вы можете передать этот ответ для создания нескольких маршрутов Routing in Asp.net Mvc 4 and Web Api

+0

Спасибо за ответ. Я получил его, и я меняю свой код, но если я пишу «/ api/tales/kids», этот запрос использует GetTale (int id). И я не использовал [ActionName] с функцией GetAllTalesByCategory. Потому что у этой функции много чего (развлечение ...). Думаю, мне приходится писать diffirent MapRoute. – BerdaN

+0

см. Мое редактирование, у него есть вопрос SO, который поможет вам создать несколько маршрутов. –

+0

Я вижу и пробую что-то подобное, но снова я этого не делал. Поэтому я немного изменил свой вопрос. Теперь это более понятно. – BerdaN

0
config.Routes.MapHttpRoute(
     name: "DefaultApiAction", 
     routeTemplate: "api/{action}/{name}/{controller}/{resourceId}", 
     defaults: new { resourceId= RouteParameter.Optional } 
     constraints: new { name = @"^[a-z]+$" } 
    ); 

может быть, вы можете попробовать определить этот маршрут, и добавить ActionName как ответ Анто в.

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