Не входить в контроллер во время проверки с аннотациями данных - PullRequest
0 голосов
/ 27 сентября 2018

Я использую ASP.NET Core restful web API.Моя проблема в том, что у меня есть проверка сервера внутри моего контроллера, чтобы проверить проверку модели представления (Contact.cs).

Однако, когда я проверяю свое POST действие CreateContact в контроллере, действие никогда не выполняетсявведено, но оно проверено правильно в соответствии с аннотациями данных, которые есть в моем классе Contact.cs.

Я не понимаю, почему проверка проходит перед входом в контроллер.Я думал, что в веб-API проверка сервера будет проверяться в Controller в соответствии с ModelState.Тогда моя ModelState.IsValid проверка кажется бесполезной.

Моя модель просмотра:

public class Contact
{
    [Required]
    public int? Id { get; set; }
    [MaxLength(20)]
    public string FirstName { get; set; }
    // ...
}

Часть действия моего контроллера, которая никогда не вводится.

[Route("api/[controller]")]
[ApiController]
public class ContactsController : ControllerBase
{
    [HttpPost]
    public IActionResult CreateContact(ViewModels.Contacts.Contact contact)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        // ...
    }
 }

1 Ответ

0 голосов
/ 27 сентября 2018

Атрибут ApiController , который вы применили к своему контроллеру, имеет определенные соглашения.Одним из них является то, что переданная модель автоматически проверяется перед вводом действия контроллера.

Таким образом, это эффективно устраняет необходимость проверять ModelState.IsValid внутри каждого метода.

Вы можете узнать больше об атрибуте ApiController в официальной документации и в этом сообщении в блоге , которые также охватывают другие соглашения, включенные в атрибут.

ЕслиВы не хотите этого поведения и все еще хотите иметь возможность сделать это вручную в действии вашего контроллера, проверьте этот вопрос по отключению функциональности .

...