Исключить "значение 'null' недопустимо для..." в ActionFilterAttribute

В проекте webapi у нас есть такая модель:

public class Person
{
    public string Name { get; set; }

    public Guid? Id { get; set; }
}

Мы настроили проверку параметров и делаем некоторые проверки, используя ActionFilterAttribute:

public class ModelActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        (...)
        var modelState = actionContext.ModelState;
        if (modelState.IsValid == false)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
        }

        base.OnActionExecuting(actionContext);
    }
}

Проблема заключается в том, что при выполнении вызова, такого как: https://localhost/person?Id=null&name='John', создается ошибка вроде:

The value 'null' is not valid for Id.

Во-первых, мы сделали поле Id обнуляемым, потому что хотим разрешить вызовы, подобные приведенному выше. Тем не менее, валидатор жалуется. Есть ли какой-нибудь чистый способ исключить эту ошибку?

Я мог бы пройтись по списку ошибок и исключить этот, но это действительно неправильно.

1 ответ

Решение

Вы можете определить модель для конкретной цели. Например:

public class PersonSearchParameters
{
    public string Name { get; set; }

    public string Id { get; set; }
}

Затем позвольте вашему методу обработать разбор Id так, как вы бы предпочли.

Я действительно думаю, что будет проще, если вы просто скажете, что id следует исключить из ваших результатов, если вы хотите, чтобы он был нулевым.

Другие вопросы по тегам