Какова цель параметра Name в HttpPostAttribute - PullRequest
3 голосов
/ 22 октября 2019

Я вижу следующий код, применяемый в основных методах действия .net:

[HttpPost("MyAction", Name = "MyAction")]
public IActionResult MyAction()
{
    // some code here
}

Для чего нужен параметр «Имя» в атрибуте HttpPost?

Ответы [ 3 ]

4 голосов
/ 22 октября 2019

Из источника

    /// <summary>
    /// Gets the route name. The route name can be used to generate a link using a specific route, instead
    ///  of relying on selection of a route based on the given set of route values.
    /// </summary>
    string Name { get; }

Пример использования;Если у вас есть два метода с одинаковыми именами, которые принимают разные параметры, вы можете использовать параметр Name, чтобы различать имена действий.

2 голосов
/ 22 октября 2019

Из document :

Имена маршрутов могут использоваться для создания URL-адреса на основе определенного маршрута. Имена маршрутов не влияют на поведение маршрутизации при сопоставлении URL-адресов и используются только для генерации URL-адресов. Имена маршрутов должны быть уникальными для всего приложения.

Может использоваться для создания URL-адреса на основе определенного маршрута. Например, маршрут определяет как:

[HttpGet("{id}", Name = "GetContact")]
public IActionResult GetById(string id)
{
    var contact = contactRepository.Get(id);
    if (contact == null)
    {
        return NotFound();
    }
    return new ObjectResult(contact);
}

Вы можете использовать метод CreatedAtRoute для возврата с содержимым нового контакта, а также с его URI. Метод CreatedAtRoute будет основан на имени маршрута "GetContact" и идентификаторе для создания URI:

[HttpPost]
public IActionResult Create([FromBody] Contact contact)
{
    if (contact == null)
    {
        return BadRequest();
    }
    contactRepository.Add(contact);
    return CreatedAtRoute("GetContact", new { id = contact.ContactId }, contact);
}
1 голос
/ 31 октября 2019

Свойство Name используется для Url Generation . Это не имеет ничего общего с маршрутизацией! Вы можете пропустить его почти все время.

Добавьте следующий код к контроллеру, и вы получите «Aha!»:

[HttpGet("qqq", Name = "xxx")]
public string yyy()
{
   return "This is the action yyy";
}

[HttpGet("test")]
public string test()
{
    var url = Url.Link("xxx", null);  //Mine is https://localhost:44384/api/qqq
    return $"The url of Route Name xxx is {url}";
}

Свойство Name в первом действиикогда используется, например, для генерации URL, просто используется для ссылки на действие yyy. В моем случае вызов /api/test возвращает строку The url of Route Name xxx is https://localhost:44384/api/qqq.

Действие yyy достижимо по маршруту .../qqq, первый параметр, переданный HttpGetконструктор атрибута.

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