HttpGetAttribute не содержит конструктор, который принимает 1 аргумент - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время я работаю над веб-API, используя Microsoft MVC Framework.Внутри их документов я прочел следующее (https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1):

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

[Route("[controller]/[action]")]
public class ProductsController : Controller
{
    [HttpGet] // Matches '/Products/List'
    public IActionResult List() {
        // ...
    }

    [HttpGet("{id}")] // Matches '/Products/Edit/{id}'
    public IActionResult Edit(int id) {
        // ...
    }
}

Замена токена происходит в качестве последнего шага построения маршрутов атрибута. Приведенный выше пример будет вести себя так же, как следующий код:

public class ProductsController : Controller
{
    [HttpGet("[controller]/[action]")] // Matches '/Products/List'
    public IActionResult List() {
        // ...
    }

    [HttpGet("[controller]/[action]/{id}")] // Matches '/Products/Edit/{id}'
    public IActionResult Edit(int id) {
        // ...
    }
}

Однако всякий раз, когда я пытаюсь использовать [HttpGet("my/route")] attribute, visual studio постоянно говорит мне: «HttpGetAttribute не содержит конструктор, который принимает 1 аргумент». Я уже читал, что должен установить Microsoft.AspNet.WebApi.WebHost с помощью менеджера пакетов, но ошибка все еще там.

MyВопрос в том, как я могу начать использовать правильный атрибут? У меня нет опыта установки пакетов в Visual Studio.

Спасибо заранее за любую помощь.

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Только ASP.NET Core имеет маршрутизацию атрибутов с атрибутами Http [Verb].Если у вас есть проект ASP.NET Framework, вы должны использовать RouteAttribute.

ASP.Net Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1

ASP.NET Framework: https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

0 голосов
/ 09 октября 2018

попробуйте

[RoutePrefix("Products")]
public class ProductsController : Controller
{
    [HttpGet]
    [Route("api/List")]
    public IActionResult List() {
        // ...
    }

    [HttpGet]
    [Route("api/Edit/{id}")]
    public IActionResult Edit(int id) {
        // ...
    }
}
0 голосов
/ 09 октября 2018

Я полагаю, вы путаете атрибуты.

Можно украсить действие с помощью [HttpGet], но этот атрибут не принимает параметр для маршрутизации.

Ваше действие может выглядетькак:

[HttpGet]
[Route("{id"}]
public IActionResult Edit(int id) {
      // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...