Использование [FromBody]
не требуется, когда контроллер аннотируется с атрибутом [ApiController]
(поддерживается только в ASP.NET Core 2.1 и новее). Это удобный способ уменьшить количество необходимых атрибутов для действий и параметров действия.
Среди других удобных методов также есть введенные ActionResult
для действий и контроллеров WebAPI-esque.
Вы можете получить дополнительную информацию из следующего сообщения в блоге на ASP.NET Core 2.1.0-preview1: Усовершенствования для создания веб-API
[ApiController] и ActionResult
ASP.NET Core 2.1 вводит новые соглашения с контроллером Web API, которые делают разработку Web API более удобной. Эти соглашения могут быть применены к контроллеру с использованием нового атрибута
[ApiController]
:
- Автоматически отвечать с 400 при возникновении ошибок проверки - нет необходимости проверять состояние модели в вашем методе действий
- Вывести более разумные значения по умолчанию для параметров действия:
[FromBody]
для сложных типов,[FromRoute]
, когда это возможно, в противном случае[FromQuery]
- Требовать маршрутизацию атрибутов - действия недоступны по маршрутам, основанным на соглашениях
Вы также можете вернуть ActionResult из своих действий веб-API, что позволяет возвращать результаты произвольного действия или определенный тип возврата (благодаря некоторому умному использованию неявных операторов трансляции). Большинство методов действия веб-API имеют определенный тип возвращаемого значения, но также должны иметь возможность возвращать несколько разных результатов действий.
Нужно признать, что функция unique
иногда может быть очень запутанной, если не дать надлежащих примеров и объяснений.
Параметр dim
указывает, к какому измерению тензорной матрицы вы хотите применить.
Например, в двумерной матрице dim=0
позволяет операции выполнять вертикально, где dim=1
означает горизонтально.
В качестве примера рассмотрим матрицу 4x4 с dim=1
. Как вы можете видеть из моего кода ниже, операция unique
применяется строка за строкой.
Вы замечаете двойное вхождение числа 11
в первом и последнем ряду. Numpy и Torch делают это, чтобы сохранить форму окончательной матрицы.
Однако, если вы не укажете какое-либо измерение, torch автоматически сгладит вашу матрицу, а затем применит к ней unique
, и вы получите одномерный массив, содержащий уникальные данные.
import torch
m = torch.Tensor([
[11, 11, 12,11],
[13, 11, 12,11],
[16, 11, 12, 11],
[11, 11, 12, 11]
])
output, indices = torch.unique(m, sorted=True, return_inverse=True, dim=1)
print("Ori \n{}".format(m.numpy()))
print("Sorted \n{}".format(output.numpy()))
print("Indices \n{}".format(indices.numpy()))
# without specifying dimension
output, indices = torch.unique(m, sorted=True, return_inverse=True)
print("Sorted (no dim) \n{}".format(output.numpy()))
Результат (dim = 1)
Ori
[[11. 11. 12. 11.]
[13. 11. 12. 11.]
[16. 11. 12. 11.]
[11. 11. 12. 11.]]
Sorted
[[11. 11. 12.]
[11. 13. 12.]
[11. 16. 12.]
[11. 11. 12.]]
Indices
[1 0 2 0]
Результат (без измерения)
Sorted (no dim)
[11. 12. 13. 16.]