在C#中将反射与对象类一起使用

时间:2018-11-14 06:55:10

标签: c# asp.net-web-api

我有一个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();

但是如何检查对象类型中的键?

我想要类似

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

但是这里typeof(model)给出了错误,因为它是一个变量,不能像Type一样使用它。

如果源发送了错误的数据(较少的属性或属性名称不匹配),而我却需要通过比较“我的自定义类型”的属性和接收到的对象的属性来找出问题所在,我就需要这样做

那么有什么方法可以从列表中的对象模型中获取键(有或没有反射)?

更新1:

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

如果API接收的模型比上面的代码模型错误(在调试中),则该模型将为null,这意味着我们永远不会知道出了什么问题,哪个属性不匹配或在接收的对象中不存在

但是

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

如果模型错误,那么它将仍然作为对象接收,并且通过获取其属性的数组或列表,我可以将其与自定义类型进行比较

这使我能够获取所有出错信息,我希望将响应发送回去,以便该API的用户可以知道自己犯了什么错误

Ex:-

enter image description here

1 个答案:

答案 0 :(得分:1)

因此,正如我在评论中提到的那样,更改您的好路径以解决不良数据是一个非常糟糕的选择。您的良好路径应该可以正常工作。如果您想捕获无效数据的请求,请使用ActionFilter:

MathNet.Numerics.LinearAlgebra