У меня есть следующее перечисление для Web API 2:
[TypeConverter(typeof(StringEnumConverter))]
public enum SortDirection
{
[EnumMember(Value = "asc")] Ascending,
[EnumMember(Value = "desc")] Descending
}
Я использую TypeConverterAttribute с StringEnumConverter от Newtonsoft.Json. Если я сериализую это перечисление в JSON, оно будет выглядеть так, как будто я этого хочу:
// "property": "asc"
// "property": "desc"
Я хотел бы иметь возможность привязать это к модели, исходящей из URI в веб-API, чтобы я мог передать ?direction=desc
public class ExampleController : ApiController
{
public IHttpActionResult GetAll([FromUri]SortDirection sortDir)
{
// the above property is not binding to value asc / dir from the query string
// it only binds to 0/1 or Ascending/Descending
}
}
В настоящее время я могу передать ?direction=0|1 или ?direction=Ascending|Descending, и веб-API свяжет его.
Я хотел бы иметь возможность сделать это, не ссылаясь явно на SortDirection ... любое перечисление, которое у меня есть, которое использует EnumMemberAttribute, к которому я хотел бы применить эту логику.
Как я могу этого добиться?
Вам необходимо реализовать привязку настраиваемых параметров: здесь простой пример для преобразования в соответствии с вашими потребностями.





Удаляю свой ответ. Теперь я вижу, что вам нужно написать свой собственный атрибут фильтра типа ActionFilterAttribute и применить его к контроллеру. Переопределите его метод «OnActionExecuting» и вручную проанализируйте значения (вам просто нужно найти параметр типа enum и ввести соответствующее значение). См. Также HttpActionContext.ActionDescriptor.GetParameters () и HttpActionContext.ActionArguments.