[HttpPost]
public async Task<IActionResult> GetData(string requestString)
{
DetailsReq req = new DetailsReq();
// Some logic to extract parameters from request string
IActionResult res = await GetDetails(req);
return Ok(res);
}
[HttpPost]
public async Task<IActionResult> GetDetails([FromBody] DetailsReq req)
{
DetailsRes res = new DetailsRes();
return Ok(res);
}
要求是將新函式 GetData() 添加到 Dot Net 核心 API。現有的 POST 方法 GetDetails() 給出了類似的回應。
我有兩個選擇。
- 從 GetDetails() 復制邏輯并在 GetData() 中使用。
- 在 GetData() 中呼叫 GetDetails()
我的問題是我們可以從另一個方法呼叫 API 方法嗎?這是好習慣嗎?
uj5u.com熱心網友回復:
我們可以從另一個方法呼叫 API 方法嗎?
要回答這個問題,是的,您可以Method/Function在Method/Function同一Controller Class. 您可以看到以下示例:
方法:GetDataFromAnotherAPI
public async Task<ActionResult> GetDataFromAnotherAPI()
{
var response = new MultipleDBQueryExecutionModel();
var handler = new HttpClientHandler();
var data = "";
var baseUrl = "https://localhost:44361/UserLog/";
var methodName = "GetData";
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Accept.Clear();
var responseFromApi = await client.GetAsync(baseUrl methodName);
if (responseFromApi.IsSuccessStatusCode)
{
data = await responseFromApi.Content.ReadAsStringAsync();
}
return Ok(data);
}
注意: HttpClientHandler與您的問題無關。我用它來處理https certificate問題。
方法:GetData:我在同一個控制器類中呼叫它
public ActionResult GetData()
{
var data = _context.multipleDBQueryExecutionModels.ToList();
return Ok(data);
}
控制器類:
public class UserLogController : Controller
{
private readonly ApplicationDbContext _context;
public UserLogController(ApplicationDbContext context)
{
_context = context;
}
}
注意:以上兩個方法屬于UserLogController 控制器類。我在方法GetData中呼叫方法GetDataFromAnotherAPI。
輸出:

這是好習慣嗎?
現在讓我們討論一下你的觀點"Copy logic from GetDetails() and use in GetData()."。不,這不被視為good practiceon Object Oriented Programming,因為它不鼓勵撰寫冗余代碼。
這里SOLID原則來拯救。哪個告訴你的repository/business邏輯class/Interface按照SOLID它被呼叫的方式分開Interface Segregation Principle。你可以看看SOLID,你的時間值得使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/515240.html
