public class APIBaseService : Controller
{
private readonly IHttpContextAccessor context;
public APIBaseService(IHttpContextAccessor context)
{
this.context = context;
}
public async Task<IActionResult> InvokeTaskAsync<T>(Func<Task<T>> Process)
{
DateTime InvokeStart = DateTime.Now;
APIResponse response = null;
try
{
var result = await Process();
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "OK",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = "Success",
Payload = result
};
return StatusCode(200, response);
}
catch(Exception e)
{
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "ERR",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = e.Message,
Payload = e.Data
};
return StatusCode(400, response);
}
}
public IActionResult InvokeTask<T>(Func<T> Process)
{
DateTime InvokeStart = DateTime.Now;
APIResponse response = null;
try
{
var result = Process();
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "OK",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = "Success",
Payload = result
};
return StatusCode(200, response);
}
catch(Exception e)
{
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "ERR",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = e.Message,
Payload = e.Data
};
return StatusCode(400, response);
}
}
public bool IsDateValid(string DateStr, out DateTime DateParsed)
{
return DateTime.TryParseExact(DateStr, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateParsed);
}
}
public partial class APIResponse
{
[JsonPropertyName("InvokedBy")]
public string InvokedBy { get; set ;}
[JsonPropertyName("InvokeStatus")]
public string InvokeStatus { get; set; }
[JsonPropertyName("InvokeStart")]
public DateTime InvokeStart { get; set; }
[JsonPropertyName("InvokeEnd")]
public DateTime InvokeEnd { get; set; }
[JsonPropertyName("Message")]
public string Message {get;set;}
[JsonPropertyName("Payload")]
public Object Payload { get; set; }
}
调用
return await APIBase.InvokeTaskAsync<xxx class>(async () => {});
调用前实例化对象,需要把它写到自己的服务,并注入次服务
分享一个.netcore API返回服务,非常好用
最新推荐文章于 2024-07-28 23:23:55 发布