Asp.net-Web-Api

ASP.Net Web API 幫助頁面:忽略某些屬性

  • January 7, 2019

是否可以讓幫助頁面範例生成器忽略特定類型的某些屬性?

例如,對於 POST 和 PUT 請求,我們對對象請求和響應消息使用相同的 DTO。當使用者發布模型(創建新記錄)時,他們不需要提供 ID 欄位。

但是一旦它被創建並且我們將新記錄序列化到響應正文中,ID 欄位就會被包含並返回給客戶端。

所以在 POST 請求範例中,我不希望顯示 ID 欄位,因為對於 post 請求它沒有意義。

但是 POST 響應範例,我確實希望顯示 ID 欄位…

我知道有ApiExplorerSettings可以應用於類或方法的屬性……但是屬性有什麼類似的嗎?

這樣的事情會很棒:

public class MyDTO
{
   [ApiExplorerSettings(IgnoreForRequestApi = true, IgnoreForResponseApi = false)]
   public int Id { get; set; }

   // Other properties omitted for brevity...
}

不,沒有類似的屬性選項。HelpPage 使用在應用程序上配置的格式化程序實例來序列化樣本,並且您可以想像格式化程序本身必須沒有這些知識。

關於解決方法:

一種。您可以通過 HttpRequestMessage 的SetSampleRequest擴展為特定操作的 requestsample 顯式設置原始樣本。您應該能夠在 Areas\HelpPage\App_Start\HelpPageConfig.cs 的文件中看到一些關於此的範例。

灣。在文件Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs中,有一個名為WriteSampleObjectUsingFormatter的方法,它使用應用程序的格式化程序實例來編寫樣本。在這裡,您需要創建與普通應用程序具有相似設置的格式化程序實例(以便它們反映您的應用程序在發出實際請求時通常會做出反應的確切序列化/反序列化語義),然後嘗試隱藏您的屬性想要。我們想要創建新實例,因為我們不想干擾應用程序的正常執行。

範例:對於 Json,您可以創建一個新的 Json 格式化程序實例並提供一個可以隱藏屬性的*ContractResolver 。*檢查此連結:http: //james.newtonking.com/projects/json/help/html/ConditionalProperties.htm

在 Xml 的情況下,我不確定我們如何在不使用 IgnoreDataMember 屬性的情況下隱藏屬性並且也不是侵入性的。

目前,我更喜歡選項“a”,因為它比“b”更簡單。

使用下面的註釋,我已經成功地從一代中隱藏了一個屬性!

[ApiExplorerSettings(IgnoreApi = true)]

引用自:https://stackoverflow.com/questions/15116822