Передать параметр Enum в метод WebApi - PullRequest
0 голосов
/ 01 марта 2019

Попытка передать значение типа перечисления в WebApi, но оно принимает любое значение, кроме целых чисел перечисления.

можно ли ограничиться принятием только значений перечисления?

public class ValuesController : ApiController
{
    [HttpGet]
    [Route("api/getName/{Gender}")]
    public IEnumerable<string> Get(Gender gender)
    {
        Gender g = gender;

        return new string[] { "value1", "value2" };
    }
}

Значение перечисления

public enum Gender
{
    Male,
    FeMale
}

Пример:

  1. http://localhost:58984/api/getName/1 - Разрешить его в FeMale
  2. http://localhost:58984/api/getName/6 - он принимает 6, но я хотел быбросить исключение.

1 Ответ

0 голосов
/ 01 марта 2019

Вы должны проверить это вручную, ASP.NET MVC не делает этого за вас:

Type enumType = gender.GetType();
bool isEnumValid = Enum.IsDefined(enumType, gender);
if (!isEnumValid) {
  throw new Exception("...");
}

Вместо того, чтобы выдавать исключение, вы также можете использовать валидатор в модели, который проверяет, не перечислено ли перечислениеявляется правильным.

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

...