zoukankan      html  css  js  c++  java
  • webapi 过滤器的使用

    参考博客:https://www.cnblogs.com/WJ--NET/p/7878286.html

    关于日志的过滤:

    AuthExceptionFilter.cs:
    using FirstDemo.Models;
    using Newtonsoft.Json;
    using System.Net.Http;
    using System.Text;
    using System.Web.Http.Filters;
    
    namespace FirstDemo.Filter
    {
        /// <summary>
        /// 设置过滤器
        /// </summary>
        public class AuthExceptionFilter:ExceptionFilterAttribute
        {
            public override void OnException(HttpActionExecutedContext actionExecutedContext)
            {
                //base.OnException(actionExecutedContext);
                // 返回500状态码,表示服务器发生错误
                actionExecutedContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError);
                // 设置返回消息
                string l_strMsg = JsonConvert.SerializeObject(new ResultModel<object>() { ReturnCode = 0, Message = "处理异常", Result = "" });
                // 写入日志
                LogModel.WriteLogError(l_strMsg);
                // 返回结果
                actionExecutedContext.Response.Content = new StringContent(l_strMsg, Encoding.UTF8);
            }
        }
    }
    控制器
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using FirstDemo.Entity;
    using FirstDemo.Models;
    using System.Data;
    using Newtonsoft.Json;
    using FirstDemo.Filter;
    
    namespace FirstDemo.Controllers
    {
        [AuthExceptionFilter]
        public class IndexController : ApiController
        {
            #region get请求,获取页面数据
            [HttpGet]
            public HttpResponseMessage Get()
            {
                try
                {
                    throw new Exception("模拟错误");
                }
                catch(Exception err)
                {
                    throw (err);
                }
                ...
            }
            #endregion
        }
    }
                    
    日志Model:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace FirstDemo.Models
    {
        public static class LogModel
        {
            private static readonly log4net.ILog m_logger = log4net.LogManager.GetLogger("LogModel");
            
            public static void WriteLogError(string a_strMsg)
            {
                m_logger.Error(a_strMsg);
            }
        }
    }
    响应信息model:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace FirstDemo.Models
    {
        public class ResultModel<T> where T :class
        {
            // 状态码
            public int ReturnCode { get; set; }
    
            // 附加消息
            public string Message { get; set; }
    
            // 附加数据
            public T Result { get; set; }
        }
    }
    Log4net.config:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.web>
          <compilation debug="true" targetFramework="4.5.2" />
          <httpRuntime targetFramework="4.5.2" />
        </system.web>
        <log4net>
          <!--记录所有的完整日志-->
          <appender name="AllLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <!--或者是文件名或是文件夹(没有后缀)-->
            <file value="log/all/log_" />
            <!--是否总是写在一个文件里-->
            <staticLogFileName value="false" />
            <!-- 是否追加到文件中 -->
            <appendToFile value="true" />
            <!--可设置为Size、Date,即大小/日期超出一定范围后就新建一个日志文件-->
            <rollingStyle value="Date" />
            <!--一天最多保存多少-->
            <maxSizeRollBackups value="50" />
            <!--每个文件最大大小,单位可是MB,KB-->
            <maximumFileSize value="5MB" />
            <!--设置用来生产文件的日期格式-->
            <datePattern value="yyyy-MM-dd'.log'"/>
            <!--日志输入的通用格式(日志的内容格式)-->
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter,log4net">
              <levelMin value="DEBUG" />
              <levelMax value="FATAL" />
            </filter>
          </appender>
    
          <!--记录错误日志,这些错误往往是一个程序bug或是要注意的-->
          <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <!--或者是文件名或是文件夹(没有后缀)-->
            <file value="log/error/error_" />
            <!--是否总是写在一个文件里-->
            <staticLogFileName value="false" />
            <appendToFile value="true" />
            <!--可设置为Size、Date,即大小/日期超出一定范围后就新建一个日志文件-->
            <rollingStyle value="Date" />
            <!--一天最多保存多少-->
            <maxSizeRollBackups value="50" />
            <!--每个文件最大大小,单位可是MB,KB-->
            <maximumFileSize value="5MB" />
            <!--设置用来生产文件的日期格式-->
            <datePattern value="yyyy-MM-dd'.log'"/>
            <!--日志输入的通用格式(日志的内容格式)-->
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter,log4net">
              <levelMin value="ERROR" />
              <levelMax value="FATAL" />
            </filter>
          </appender>
          <!--Set root logger level to DEBUG and its only appender to A1-->
          <root>
            <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
            <level value="ALL" />
            <appender-ref ref="AllLogFileAppender" />
            <appender-ref ref="ErrorLogFileAppender" />
          </root>
        </log4net>
    </configuration>

     action过滤器:

    ActionFilter.cs过滤器
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http.Controllers;
    using System.Web.Http.Filters;
    
    namespace FirstDemo.Filter
    {
        public class ActionFilter:ActionFilterAttribute
        {
            public override void OnActionExecuting(HttpActionContext actionContext)
            {
                //base.OnActionExecuting(actionContext);
                // 添加在方法执行前需要处理的代码
            }
            public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
            {
                //base.OnActionExecuted(actionExecutedContext);
                // 添加在方法执行后需要处理的代码
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using FirstDemo.Entity;
    using FirstDemo.Models;
    using System.Data;
    using Newtonsoft.Json;
    using FirstDemo.Filter;
    
    namespace FirstDemo.Controllers
    {
        [ActionFilter]  // 添加action过滤器
        [AuthExceptionFilter]
        public class IndexController : ApiController
        {
            #region get请求,获取页面数据
            [HttpGet]
            public HttpResponseMessage Get()
            {
            }
            #endregion
        }
    }

    ///

  • 相关阅读:
    springboot的整合篇-springmvc,mybatis,数据库等
    快速搭建springboot工程
    Git常用命令
    SpringBoot整合通用Mapper
    SpringBoot项目部署
    实例化调用和静态方式调用的区别
    CentOS系统安装PHP7.3
    CentOS7部署LNMP环境
    Apache和Nginx的区别
    Linux系统下卸载MySQL
  • 原文地址:https://www.cnblogs.com/namejr/p/11221016.html
Copyright © 2011-2022 走看看