ASP.NET WebAPI2 Глобальная привязка пользовательской модели для [FromUri] для обработки 'null' в запросах uri "someMethod? SomeId = null" - PullRequest
0 голосов
/ 31 октября 2018

Давайте предположим, что у нас есть такой метод в одном из наших контроллеров 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.

...