Как я могу иметь базовый контроллер с префиксом маршрута в net ядро ​​3 - PullRequest
0 голосов
/ 27 апреля 2020

На самом деле я работаю с. NET Core 3,

, и у меня есть контроллеры с таким маршрутом:

[ApiController]
[Route("customers/app")]
public class CustomerAppController : ControllerBase
{
}

То, что я хотел бы сделать, это иметь Базовый контроллер, где я могу разместить много вещей, которые я хочу, для всех контроллеров, включая префикс маршрута, например:

[Route("api/v1/[controller]")]
public class CoreController : ControllerBase
{
    protected virtual Object HandleException(Exception ex, string path, ILogger logger)
    {
        logger.LogError(ex, "Unhandled exception.");
        return StatusCode(5000, new { ex.Message });
    }
}

Тогда контроллер будет:

[ApiController]
[Route("customers/app")]
public class CustomerAppController : CoreController
{

    //TODO: put actions here

    public override Object HandleException(Exception ex, string path, ILogger logger) { }
}

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

Я обнаружил, что могу использовать этот метод:

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UsePathBase("/api/v1");
        //other things
    }

Теперь я могу вызывать свой API, используя localhost/api/v1/randompath, но он также работает, если я использую localhost/randompath

1 Ответ

0 голосов
/ 28 апреля 2020

Добавьте атрибут Route к вашему контроллеру и установите путь там.

[Route("api/v1/[controller]")]
[ApiController]

в соответствующих контроллерах. Я использую. net core web api, и он работает для меня таким подходом, без необходимости использовать app.UsePathBase (). Если я задаю путь как / api / v1 /, я не могу получить доступ к API по шаблону URL / api / [Controller] без добавления v1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...