ASP Core: как маршрутизировать API-контроллер, расположенный в папке области? - PullRequest
0 голосов
/ 26 января 2019

Состав:

+ MyProj
   + Areas
       + Configuration
          - Pages
          - ConfigurationApiController.cs

Создание контроллера без папки Controllers было предложено VS2017, и это нормально для меня, так как я использую Razor Pages и мне не нужна папка Controllers:

enter image description here

Это не работает:

Определен контроллер:

[Route("api")]
[Produces("application/json")]
[ApiController]
public class ConfigurationApiController : ControllerBase
{
    private readonly ApplicationSettings applicationSettings;
    [HttpGet]
    public ActionResult GetUsers()
    {

Маршрутизация Mvc настроена стандартным способом:

app.UseMvc(routes =>
            {

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

Как направить на GetUsers действие ConfigurationApiController?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Некоторые другие параметры маршрутизации:

  1. Обнаружена рабочая опция с AspNetCore.RouteAnalyzer : http://localhost:8080/api (да, без действий)

  2. После удаления атрибутов веб-API

   // [Route("api")]
   // [Produces("application/json")]
   // [ApiController]

, затем http://localhost:8080/ConfigurationApi/GetUsers

все может быть в порядке, но в маршрутизации нет области, и кажется, что "маршрутизация в область по соглашениям" не работает, это asp core: ASP Core: как настроить область для контроллера api без AreaAttribute (или как включить маршрутизацию условной области для контроллера Api)? и https://github.com/aspnet/AspNetCore/issues/7042

Также в этом случае ContentResult { Content = json, ContentType = "application/json" } должно быть возвращено, но это нормально для меня, так как я предпочитаю использовать сериализацию вместо потоковых сериализаторов.

  1. Это маршруты к http://localhost:8080/Configuration/api
    [Area("Configuration")]
    [Route("[area]/api")] 
    [Produces("application/json")]
    [ApiController]

другой вариант: [Route ("[area] / api / [action]")] маршруты до http://localhost:8080/Configuration/api/GetUsers

при удалении атрибута area выдает ошибку времени выполнения Error: While processing template '[area]/api', a replacement value for the token 'area' could not be found. Available tokens: 'action, controller'. To use a '[' or ']' as a literal string in a route or within a constraint, use '[[' or ']]' instead.

    //[Area("Configuration")]
    [Route("[area]/api")]
    [Produces("application/json")]
    [ApiController]
0 голосов
/ 26 января 2019

Измените маршрут API и добавьте атрибут Area, чтобы указать название области для маршрута [area].

    [Area("Configuration")]
    [Route("[area]/api/[controller]")]
    [ApiController]
    public class ConfigurationApiController : ControllerBase
    {
    }

Вот и все, к нему можно получить доступ по адресу http://localhost:8080/Configuration/api/ConfigurationApi

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