ASP.NET Core中使用自定义MVC过滤器属性的依赖注入

 除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作。

  ASP.NET Core中常用的MVC过滤器之一是  

    public class ExceptionMessage     {         private object errorMessage;         public string Message { get; private set; }         public string Description { get; private set; }         public IDictionary<string,string> ValidationErrors { get; private set;}         public ExceptionMessage(ExceptionContext context)         {             if (context.ModelState != null && context.ModelState.Any(m => m.Value.Errors.Any()))             {                 this.Message = "Model validation failed.";                 this.ValidationErrors = context.ModelState.Keys                     .SelectMany(key => context.ModelState[key].Errors.ToDictionary(k => key, v => v.ErrorMessage))                     .ToDictionary(k => k.Key, v => v.Value);             }             else             {                 this.Message = context.Exception.Message;                 this.Description = context.Exception.StackTrace;             }         }     }
复制代码

由于本文重点不是错误消息结构,不过在Microsoft REST API准则 Github存储库中提供了一些错误消息准则,这些可能会给你带来帮助。

现在您的错误响应理想情况下是一条JSON消息,但是让我们将序列化留给应用程序的管道并返回一个ObjectResponse派生实例。为此我创建了ErrorObjectResult

复制代码
using Microsoft.AspNetCore.Mvc; using System.Net;  namespace CzarCms.Models {     public class ErrorObjectResult : ObjectResult     {         public ErrorObjectResult(object value, HttpStatusCode statusCode = HttpStatusCode.InternalServerError) : base(value)         {             StatusCode = (int)statusCode;         }     } }
复制代码

除了获取状态代码的构造函数(默认为500内部服务器错误)和ObjectResponse基础构造函数的对象之外,此类中没有什么特别之处。我们在本文中关注的核心组件是我们的自定义ExceptionFilterAttribute派生类。

复制代码
public class ApiExceptionFilter : ExceptionFilterAttribute     {         public override void OnException(ExceptionContext context)         {             var errorMessage = new ExceptionMessage(context);             if (context.ModelState.ErrorCount==0)                 context.Result = 
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信