现在想给接口的返回值统一封装一个格式(这里就是EcisActionResult),在filter里OnActionExecuted()里,把返回的结果封装成了一个类.
public override void OnActionExecuted(ActionExecutedContext context)
{
if (context.Exception is ApplicationException appex)
{
context.Result = new ObjectResult(ActionResultGenerator.CreateErrorResult<object>(appex.Message));
context.ExceptionHandled = true;
_log.Warn($"{context.HttpContext.Request.Path} : {appex.Message}");
}
else if (context.Result is ObjectResult result)
{
if (result.Value is not IEcisActionResult)
{
result.Value = ActionResultGenerator.CreateDataResult(result.Value);
}
}
_log.Debug($"End-{context.HttpContext.Request.Method}: {context.HttpContext.Request.Path} StatusCode:{context.HttpContext.Response.StatusCode}");
}
现在的问题是,当接口返回类型为字符串时,会发生一个错误:
Unable to cast object of type 'FxEcis.WebApi.DataEntities.EcisActionResult`1[System.Object]' to type 'System.String'
但是如果是其他数据结构,比如int,bool,list<xxx>,都可以正常的转成那个类型并返回,
如果加一句
result.DeclaredType = typeof(EcisActionResult<object>);
字符串就也能格式化了,但是有大神知道为什么其他数据类型不用加也能正常返回的原因吗