![](/img/trans.png)
[英]How to get Mac Address OR IPv4 address of Client Machine to uniquely identify machine in ASP.net core v3.1
[英]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.