Динамическое изменение значения атрибута маршрута в ASP. NET CORE - PullRequest
0 голосов
/ 03 февраля 2020

Я ищу способ грамматически изменить значение атрибута Route.

У меня есть сценарий, где маршрут API должен быть либо:

  1. [Route("api/v1/[Controller]")], либо
  2. [Route("api/xyz/v1/[Controller]")]

в зависимости от того, запускаю я его в режиме отладки или нет.

[Route("api/v1/[Controller]")]
[ApiController]  
public class MyController : BaseController
{
}

Я попытался добавить переменную в Base Controller, но понял, что не могу получить к ней доступ в атрибуте Route.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Вы не можете изменить значение атрибута после компиляции, так как атрибуты являются константами времени компиляции. Вот почему вы не можете использовать переменную из вашего класса контроллера в качестве параметра (если это не const)

Вместо этого вы можете использовать директивы препроцессора , чтобы сделать это следующим образом

#if DEBUG
[Route("api/v1/[Controller]")]
#else
[Route("api/xyz/v1/[Controller]")]
#endif

(Вы можете изменить его на if RELEASE, а также на маршруты)

0 голосов
/ 03 февраля 2020

Вы можете сделать это в своем startup.cs

app.UseMvc(routes =>
{
   routes.MapRoute("default", "api/{controller=Home}/{action=Index}/{id?}");
});

Просто сделайте оператор if для отладки.

app.UseMvc(routes =>
{
   routes.MapRoute("default", "api/xyz/{controller=Home}/{action=Index}/{id?}");
});

Или UseControllers или все, что вы используете.

...