簡體   English   中英

如何使 ASP.NET Core (v3.1) Web API 接受來自主體的子類參數

[英]How to make ASP.NET Core (v3.1) Web API accepts child class parameter from body

我現在正在制作一個 API 來接受第三方令牌信息並將其存儲到數據庫中。 類定義如下:

public class ThirdPartyBaseToken
{
    [JsonProperty("accessToken")]
    public virtual string AccessToken { get; set; }

    [JsonProperty("brand")]
    public virtual string Brand { get; set; }
}

控制器中的 API 如下:

public async Task<IActionResult> SaveTokenAsync([FromBody]ThirdPartyBaseToken tokenBody)
{
    var request = new SavingRequest
    {
        ThirdPartyToken = tokenBody.AccessToken,
        ……
        ……
    };
    
    await backendService.SaveAsync(request);

    return this.StatusCode(201);
}

但是我遇到了一些例外,經過調查,我發現一些第三方的屬性名稱是“accessToken”,而其他的則是“openToken”。 在這種情況下,我創建了一個從基類繼承的子類並覆蓋 JsonProperty,如:

public class ThirdPartyChildToken: ThirdPartyBaseToken
{
    [JsonProperty("openToken")]
    public override string AccessToken { get; set; }
}

我希望一旦“openToken”屬性出現,API 可以接受它並從 AccessToken 正確獲取令牌信息。 不幸的是,我在本地調試,發現 AccessToken 仍然為空,這意味着 JsonProperty("openToken") 不起作用。

有人可以給我一些解決問題的說明嗎?

我覺得從設計的角度來看,最好保持屬性名稱與 JSON 屬性名稱匹配的約定。 因此,您可以添加這兩個屬性,然后檢查哪一個不為空。

public string GetToken()
    => this.AccessToken ?? this.OpenToken ?? throw new Exception("Token is null.");

此約定還有一個優點,即您不必顯式指定每個[JsonProperty]屬性。

暫無
暫無

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

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