我有一个方法来调用api服务以获得一些结果,并且方法的返回类型是类类型。对于单个类,我可以将name指定为其返回类型并可以正常工作。但是在某些情况下,返回类型将被更改。在那种情况下,我陷入了继续代码的困境。请指导我如何实现这一目标。
预期解决方案: 我希望在Details类的GetDoc(..)方法中添加if条件。基于docType,我需要将GetRequest(Records)更改为GetRequest(Employee)。
public Class Details{
public async Task<IActionResult> GetDoc(string docType){
var result= await _apiService.GetRequest<Records>( //in some cases i need to change 'Records' to 'Employee'
url,//api url
...
)
}
}
----------
public class Record{
public Record(int id, string name){
ID=id;
Name=name
}
public int ID{get; set;}
public string Name{get;set;
}
public class Employee{
public Record(int id, string name){
ID=id;
Name=name
}
public int ID{get; set;}
public string Name{get;set;
}
public class ApiService{
public async Task<IactionResult> GetRequest<T>(string url, ....){
// here i am deserializing the response content using jsonconvert.
}
}
答案 0 :(得分:1)
我建议不要为每个方法创建不同的终结点(建议这样做,因为它看起来像是为各个实体获取详细信息的终结点),因此建议您不要这样做。因此,类似:
public class RecordController
{
public async Task<IActionResult> GetDetails(int id)
{
var result = await _apiService.GetRequest<Record>(id);
// Rest of the processing...
}
}
然后是另一个员工控制者:
public class EmployeeController
{
public async Task<IActionResult> GetDetails(int id)
{
var result = await _apiService.GetRequest<Employee>(id);
// Rest of the processing...
}
}
如果其余逻辑允许,则可以进一步创建通用控制器,例如:
public abstract class MyBaseController<T>
{
public virtual async Task<IActionResult> GetDetails(int id)
{
var result = await _apiService.GetRequest<T>(id);
// Rest of the processing...
// If the processing is not generic you may be able to use a delegate to handle that bit.
}
}
现在在您的单个控制器中,您可以像这样继承:
public class RecordController : MyBaseController<Record>
{
}
和
public class EmployeeController : MyBaseController<Employee>
{
}
实际上没有对此进行测试。只需草绘代码即可为您提供设计类的想法。