簡體   English   中英

在 C# 中使用反射與對象類

[英]Use of Reflection With object Class in C#

我有一個 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(model) 給出錯誤,因為它是一個變量,不能像類型一樣使用它。

如果源發送錯誤的數據(更少的屬性或屬性名稱不匹配),我需要這個,我應該能夠通過比較我的自定義類型和接收到的對象的屬性來找出問題所在

那么有沒有辦法從列表中的對象模型中獲取鍵(有或沒有反射)??

更新 1:

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

如果 API 接收到錯誤的模型而不是上面的代碼模型將為空(在調試中),這意味着我們永遠不會知道出了什么問題,哪個屬性不匹配或不存在於接收的對象中

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

在這里,如果模型是錯誤的,它將作為對象接收,通過獲取其屬性的數組或列表,我可以將它與我的自定義類型進行比較

這使我能夠獲得有關出錯的所有信息,我想發回此響應,以便此 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM