C# 反射与对象类在C语言中的应用#
我有一个API,在其中我接收自定义类的对象C# 反射与对象类在C语言中的应用#,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个API,在其中我接收自定义类的对象 [HttpPost("[action]")] public ResultSet AddApplication([FromBody] Application model) { // Code Here } 应用程序是一个自定义类,大约有64个属性 现在,我希望将其作为应用程序对象接收,而不是应用程序对象 public ResultSet AddApplication([FromBody] object
[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] Application model)
{
// Code Here
}
应用程序是一个自定义类,大约有64个属性
现在,我希望将其作为应用程序对象接收,而不是应用程序对象
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)给出了错误,因为它是一个变量,不能像使用类型一样使用它
如果源发送错误的数据(属性或属性名称不匹配的更少),我需要这个,通过比较自定义类型的属性和接收到的对象,我应该能够找出什么是错误的
那么有没有办法从列表中的对象模型中获取关键点(有反射还是没有反射)
更新1:
[HttpPost("[action]")]
public ResultSet AddApplication([FromBody] Application model)
{
// Code Here
}
若API接收到错误的模型,那个么上述代码中的模型将为null(在调试中),这意味着我们永远不会知道出了什么问题,哪个属性不匹配或者在接收到的对象中不存在
但是
在这里,若模型是错误的,那个么它将作为对象接收,通过获取其属性的数组或列表,我可以将其与我的自定义类型进行比较
这使我能够获得出错的每一个信息,我想发回这个响应,以便这个API的用户知道他们犯了什么错误
例如:
因此,正如我在评论中提到的,改变好的路径来解释坏的数据是一个非常糟糕的选择。你的好路径应该像一切正常一样完成它的工作。如果要捕获包含无效数据的请求,请使用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
}
你为什么要这样做。因为如果源代码发送错误的数据(属性或属性名称不匹配),我应该能够通过比较自定义类型的属性和接收到的objectGood来找出错误,顺便问一下,您希望从客户端发送的任意数据创建什么运行时类型?我能想到的最好方法是使用dynamic,希望它能为您工作。我看到了您的更新1,在这种情况下,您可以定义自己的模型绑定类,在绑定之前可以选择验证其值。因为您没有标记任何asp.net版本,所以我假定它是asp.net核心。是自定义模型绑定的msdn参考。谢谢,但同样,这种方法只在数据注释验证的情况下有效,而不是我在这里提到的情况。如果用户发送的属性与actionfilter中的属性不匹配,则它将接收为null,并将使“ModelState.IsValid”无效。如果属性为null,并且它具有
[必需]
,则它无效…请检查更新1中的快照,在这种情况下,ModelState.IsValid没有提供任何信息,所以我已经回答完这个问题,因为您显然不明白这里发生了什么。祝你好运。非常感谢,非常有帮助
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
}