Использование Reflection с объектом Class в C # - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть API, в котором я получаю объект пользовательского класса

    [HttpPost("[action]")]
    public ResultSet AddApplication([FromBody] Application model)
    {
     // Code Here
    }

Приложение является пользовательским классом и имеет около 64 свойств.

Теперь вместо объекта Application я хочу получить его как

    public ResultSet AddApplication([FromBody] object model)

Прежде чем продолжить, я хочу проверить, есть ли 64 ключа «объектная модель» или нет

Я могу сделать это с отражением в классе

     Type T = typeof(LoanApplication);
     PropertyInfo[] P = T.GetProperties();

Но как проверить ключи в объекте Type?

Я хочу что-то вроде

[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] object model)
{
 Type T = typeof(model);
 PropertyInfo[] P = T.GetProperties();
}

Но здесь typeof (модель) выдает ошибку, поскольку она является переменной и не может использовать ее как тип.

Мне это нужно в случае, если источник отправляет неверные данные (меньше несоответствующего имени свойства или свойства), чем я должен быть в состоянии выяснить, что не так, сравнивая свойства My Custom Type и полученного объекта

Так есть ли способ получить ключи от объектной модели в списке (с отражением или без него) ??

Обновление 1:

[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] Application model)
{
 // Code Here
}

Если API получает неправильную модель, то в приведенном выше коде модель будет нулевой (при отладке), и это означает, что мы никогда не узнаем, что пошло не так, какое свойство не соответствует или отсутствует в полученном объекте

Но

[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] object model)
{
}

Здесь, если модель неверна, она все равно будет получена как объект, и, получив массив или список ее свойств, я могу сравнить ее с моим пользовательским типом

Это позволяет мне получать каждую информацию о том, что пошло не так, этот ответ я хочу отправить обратно, чтобы пользователь этого API узнал, какую ошибку он совершил

Пример: -

enter image description here

1 Ответ

0 голосов
/ 14 ноября 2018

Итак, как я уже упоминал в своем комментарии, изменение хорошего пути для учета неверных данных - крайне неудачный выбор. Ваш хороший путь должен выполнять свою работу, как будто все в порядке. Если вы хотите перехватить запросов с неверными данными, используйте ActionFilter:

public LogInvalidDataRequstFilterAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActinExecutingContext filterContext)
  {
    if (!filterContext.Controller.ViewData.ModelState.IsValid)
    {
      // Data isn't valid so now what?
    }
  }
}

[LogInvalidDataRequestFilter]
[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] Application model)
{
 // Code Here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...