2016-03-10 5 views
0

Я ищу динамический способ использования MapHttpRoute.
Мой маршрут:Динамическое использование MapHttpRoute

  config.Routes.MapHttpRoute(
      name: "RouteReports", 
      routeTemplate: "r2/{controller}/{clientId}/{action}", 
      defaults: new { action = "adherence", controller = "reports" } 
      ); 

В настоящее время у меня есть 2 метода:

[HttpGet] 
    [ActionName("adherence")] 
    public AdherenceReport GetAdherenceReport(string clientId) { } 

    [HttpGet] 
    [ActionName("adherence")] 
    public AdherenceReport GetAdherenceReport(string clientId, int year, int month) { } 

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

r2/reports/client1/adherence 
r2/reports/client1/adherence?year=2015&month=8 
r2/reports/client1/adherence?month=8 
r2/reports/client1/adherence?year=2015 

EDIT: Прямо сейчас, только первые и вторые запросы работать. Третий и четвертый возвращают ошибку.

Возможно ли это?
Спасибо.

ответ

2

Если вы сделаете ваши year и month параметры по желанию (и, возможно, даже nullable) он будет работать:

[HttpGet] 
[ActionName("adherence")] 
public AdherenceReport GetAdherenceReport(string clientId) { } 

[HttpGet] 
[ActionName("adherence")] 
public AdherenceReport GetAdherenceReport(string clientId, int year = 0, int month = 0) { } 

Внутри метода, вы просто проверить для тех значений и действовать соответствующим образом.

Надеюсь, что это поможет.

+0

Unfortunatley, Ни один из них (init и nullable) не работал. – AsafSavich

+0

Что не работает? Вы получаете исключение или метод не вызван? – MichaelDotKnox

+0

Извините, мой плохой - забыл расколоть что-то. Работает отлично, спасибо человеку. – AsafSavich

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