【发布时间】:2020-04-11 15:17:13
【问题描述】:
我创建了一个操作过滤器,以使用context.result 在ActionFilterAttribute 中返回自定义结果:
public class ResultApi : ActionFilterAttribute
{
private readonly ResposeFormat resposeFormat;
public ResultApi(ResposeFormat resposeFormat)
{
this.resposeFormat = resposeFormat;
}
public override void OnResultExecuting(ResultExecutingContext context)
{
resposeFormat.ContextResult(context);
base.OnResultExecuting(context);
}
}
我正在使用策略模式来格式化结果:
public abstract class ResposeFormat
{
public abstract void ContextResult(ResultExecutingContext context);
}
而且,这里是我的 Formatter 的不同实现:
确定结果:
public abstract class OkResultFormatter : ResposeFormat
{
public override void ContextResult(ResultExecutingContext context)
{
if (context.Result is OkResult okResult)
context.Result = new JsonResult(new ReturnResult(true, StatusCode.Success)) { StatusCode = okResult.StatusCode };
}
}
错误请求结果:
public abstract class BadRquestObjectresultFormatter : ResposeFormat
{
public override void ContextResult(ResultExecutingContext context)
{
if (context.Result is BadRequestObjectResult badRequestObjectResult)
{
var message = badRequestObjectResult.Value.ToString();
if (badRequestObjectResult.Value is SerializableError errors)
{
var errorMessages = errors.SelectMany(p => (string[])p.Value).Distinct();
message = string.Join(" | ", errorMessages);
}
context.Result = new JsonResult(new ReturnResult(false, StatusCode.BadRequest, message)) { StatusCode = badRequestObjectResult.StatusCode };
}
}
}
当我将context 传递给resposeFormat.ContextResult(context); 时,我希望它找到请求的类型并使用OkResultFormatter 或BadRquestObjectresultFormatter。
我该怎么做?
【问题讨论】:
标签: c# asp.net asp.net-core design-patterns