我有一个简单ApiController的尝试捕获并返回错误。这是一个快速OnExceptionAspect演示,但我遇到了一个障碍:我不知道如何BadRequest以args.ReturnValue. 我认为它会比这更简单。这是我很长一段时间以来第一次使用 PostSharp,当然也是第一次使用 ASP.Net Core。注意:我在上下文中有一个错误的连接字符串来强制快速错误(未显示)。父控制器[HttpGet("Get/{studentId}")][ActionResultExceptionAspect(StatusCode = HttpStatusCode.BadRequest)]public ActionResult<IEnumerable<ParentModel>> RetrieveParents(string studentId){ var query = Context.ParentViews .Where(x => x.StudentID == studentId) .Select(s => EntityMapper.MapFromEntity(s)); return query.ToArray();}ActionResultExceptionAspectpublic override void OnException(MethodExecutionArgs args){ args.FlowBehavior = FlowBehavior.Return; args.ReturnValue = ((StudentControllerBase)args.Instance).BadRequest();}我收到以下错误:System.InvalidCastException: Unable to cast object of type 'Microsoft.AspNetCore.Mvc.BadRequestResult' to type 'Microsoft.AspNetCore.Mvc.ActionResult`1[System.Collections.Generic.IEnumerable`1[Student.Models.ParentModel]]'.
1 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
该问题似乎是基于实例的问题。我看到很多解决方案对于我需要的东西来说似乎过于复杂,所以我用最简单的方法来解决这个问题,直到找到更好的解决方案。ActionResult<T>每当在实例外部生成时,我都认为这是特定于返回类型的问题。出于单元测试的目的,这对于泛型来说似乎很简单,但由于这是运行时并且难以解决我使用的未知返回类型Activator.CreateInstance
我的新OnException方法是:
public override void OnException(MethodExecutionArgs args)
{
var methType = ((MethodInfo)args.Method).ReturnType;
args.ReturnValue = Activator.CreateInstance(methType, ((ControllerBase)args.Instance).BadRequest());
args.FlowBehavior = FlowBehavior.Return;
}
我绝不确定这是正确的方法,但它适用于这种情况。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消