Давайте предположим, что у нас есть такой метод в одном из наших контроллеров web-api:
[HttpGet]
public async Task<IHttpActionResult> SomeMethod([FromUri] SomeModel options)
{
[...]
Класс SomeModel выглядит так:
public class SomeModel {
public long? SomeId {get;set;}
}
Если мы выполним запрос GET для нашего метода следующим образом:
http://our.host/api/foobar/someMethod?someId=null/undefined
Тогда мы получаем ошибку о том, что значение null / undefined не применимо к свойству SomeId. Я знаю, что мы можем обойти это, пропустив 'someId', когда он нулевой / неопределенный. Однако это влечет за собой написание кода в служебном вызове, и это своего рода вздор.
Можно ли зарегистрировать глобальный механизм связывания моделей, который может обрабатывать преобразование для всех типов использования [FromUri] на всех контроллерах / действиях? Это самый близкий ответ, который я смог найти:
https://stackoverflow.com/a/43978293/863651
Но этот ответ применим только для определенного свойства конкретной модели в конкретном действии. Я ищу способ применить такую настройку на глобальном уровне web-api-конфигурации (иначе при запуске сервера). Что-то вроде:
httpConfiguration.Services.Replace(typeof(...), new MyClass());
Есть подсказки, что такая подстройка действительно возможна:
https://www.strathweb.com/2013/04/asp-net-web-api-parameter-binding-part-1-understanding-binding-from-uri/
но я просто не смог найти что-то близкое к тому, чего я пытаюсь достичь.
Обновление: этот подход кажется многообещающим
https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
В сочетании с этим наконечником:
https://stackoverflow.com/a/283515/863651
С этими двумя ресурсами я думаю, что можно достичь желаемого результата в WebApi2.