Версия URI Web API не работает должным образом - PullRequest
0 голосов
/ 25 февраля 2019

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

<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:61496/api/v1/foo/create'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'foo'.
</MessageDetail>
</Error>

Контроллер

 public class FooController : ApiController
{
    private readonly IFoo _ifoo;

    public FooController(IFoo foo)
    {
        _ifoo = foo;
    }

    /// <summary>
    /// Return an instance of a Foo object.
    /// </summary>
    /// <returns></returns>
    [Route("api/v1/[controller]/create")]
    [HttpGet]
    public Foo Create()
    {
        return _ifoo.Create();
    }

}

WebApiConfig

 public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/v1/{controller}/{id}", //v1 specified
                defaults: new { id = RouteParameter.Optional }
            );
        }

Обновите эту работу, но почему ??

 [Route("api/v1/foo/create")]
    [HttpGet]
    public Foo Create()
    {
        return _ifoo.Create();
    }

1 Ответ

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

На основе показанной конфигурации вы используете , а не

Замена токенов, например [controller]и [action] в шаблонах маршрутов были добавлены только в более свежую версию ядра asp.net.

Для удобства маршруты атрибутов поддерживают замену токенов, заключая токен в квадратные скобки ([]).Токены [action], [area] и [controller] заменяются значениями имени действия, имени области и имени контроллера из действия, в котором определен маршрут

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core: Замена токенов в шаблонах маршрутов ([контроллер], [действие], [область] )

, поэтому [Route("api/v1/[controller]/create")]не работает, когда вы пытаетесь перейти к api/v1/foo/create, так как первый вариант воспринимается как литеральная строка в используемой версии платформы.

Ссылка Маршрутизация атрибутов в ASP.NET Web API2

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