如何使用 OnExceptionAspect 返回 ActionResult<IEnumerable

我有一个简单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();

}

ActionResultExceptionAspect


public 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]]'.


汪汪一只猫
浏览 106回答 1
1回答

杨__羊羊

该问题似乎是基于实例的问题。我看到很多解决方案对于我需要的东西来说似乎过于复杂,所以我用最简单的方法来解决这个问题,直到找到更好的解决方案。ActionResult<T>每当在实例外部生成时,我都认为这是特定于返回类型的问题。出于单元测试的目的,这对于泛型来说似乎很简单,但由于这是运行时并且难以解决我使用的未知返回类型Activator.CreateInstance我的新OnException方法是:public override void OnException(MethodExecutionArgs args){&nbsp; &nbsp; var methType = ((MethodInfo)args.Method).ReturnType;&nbsp; &nbsp; args.ReturnValue = Activator.CreateInstance(methType, ((ControllerBase)args.Instance).BadRequest());&nbsp; &nbsp; args.FlowBehavior = FlowBehavior.Return;}我绝不确定这是正确的方法,但它适用于这种情况。
打开App,查看更多内容
随时随地看视频慕课网APP