WebAPI 过滤器拦截处理以及异常捕获

对action进行拦截处理

 public class UserAuthorizeAttribute : ActionFilterAttribute
    {
        /// <summary>
        /// CC调用的Token
        /// </summary>
        //private static readonly string CCToken = ConfigurationManager.AppSettings["CCToken"].ToString();

        /// <summary>
        /// WebApi请求监听
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(HttpActionContext oHttpActionContext)
        {
            string actionName = oHttpActionContext.ControllerContext.RouteData.Values["action"].ToString();
            if (actionName == "Login" || actionName == "PostSendSMS")
            {
                return;
            }
            HttpContextBase oHttpContextBase = (HttpContextBase)oHttpActionContext.Request.Properties["MS_HttpContext"]; //获取传统context     

            string sToken = oHttpContextBase.Request.Form["Token"]; //先从post里面查

            if (string.IsNullOrEmpty(sToken))
                sToken = oHttpContextBase.Request.QueryString["Token"]; //再从get里面查

            //1.验证Token
            if (string.IsNullOrEmpty(sToken))
            {
                HttpResponseMessage oHttpResponseMessage = new HttpResponseMessage();
                oHttpResponseMessage.Content = new StringContent("{‘Flag‘:false,‘Message‘:‘Token为空‘,‘ResultObj‘:null,‘Code‘:‘9101‘}", Encoding.UTF8, "application/json");

                throw new HttpResponseException(oHttpResponseMessage);
            }
            string CCToken = ConfigurationManager.AppSettings["CCToken"].ToString();
            if (sToken == CCToken)
            {
                return;
            }
            LoginInfoBiz loginBiz = new LoginInfoBiz();
            E_LoginInfo value = loginBiz.GetToken(sToken);
            if (value == null)
            {
                HttpResponseMessage oHttpResponseMessage = new HttpResponseMessage();
                oHttpResponseMessage.Content = new StringContent("{‘Flag‘:false,‘Message‘:‘Token失效‘,‘ResultObj‘:null,‘Code‘:‘9101‘}", Encoding.UTF8, "application/json");

                throw new HttpResponseException(oHttpResponseMessage);
            }
            oHttpActionContext.ControllerContext.Request.Properties.Add("ITCode", value.EngCode);

        }

    }

ajax调用的时候在error中进行异常捕获,就会获取拦截器里抛出的异常信息

  function ApiTest() {
            $("#result").html("");
            $.ajax({
                type: $("#type").val(),
                dataType: "json",
                url: $("#url").val(),
                data: eval("(" + $("#data").val() + ")"),
                success: function (results) {
                    if (typeof results == "object") {
                        $("#result").html(JSON.stringify(results));
                    }
                    else {
                        var resultObj = JSON.parse(results);
                        $("#result").html(results);
                    }
                    //使用时,需要转换为Json对象

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(XMLHttpRequest.responseText);
                }
            });
        }
时间: 2024-08-05 12:25:32

WebAPI 过滤器拦截处理以及异常捕获的相关文章

Servlet过滤器——异常捕获过滤器

1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获语句,然后在chach语句中,循环异常对象,直到找出根异常为止. 3.具体实现 (1)创建Filter实现类ExceptionFilter.java,利用throwable抛出异常,去捕捉异常原因并转到相应的页面中主要代码为: public class ExceptionFilter impleme

iOS异常捕获

文章目录 一. 系统Crash 二. 处理signal 下面是一些信号说明 关键点注意 三. 实战 四. Crash Callstack分析 – 进?一步分析 五. demo地址 六. 参考文献 前言 今天在ios高级群,有朋友问到iOS的异常捕捉的问题,这一块以前也没有研究过,趁此机会研究了一把.并写了一个demo,如有需要可以在文章最下面去下载. 在阅读文章之前,建议大家在阅读完此篇文章后可以阅读漫谈iOS Crash收集框架,了解一下原理. 开发iOS应用,解决Crash问题始终是一个难题

全局的异常捕获Struts2

自定义一个拦截器实现全局异常捕获~ struts配置文件. <interceptors> <interceptor name="myException"  class="org.sixtb.portal.base.interceptor.InterceptorHandler"/> <!-- 定义一个拦截器栈 --> <interceptor-stack name="myExceptionInterceptor&qu

170621、springboot编程之全局异常捕获

1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice,在方法上注解@ExceptionHandler(value = Exception.class),Exception.class表示拦截所有的异常信息 package com.rick.common.handler; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.util.IOUtils;import com.r

asp.net web api 异常捕获

1 向客户端发送错误消息 使用throw new HttpResponseException()向客户端抛出错误信息. HttpResponseException包含两个重载的构造函数,其中一个是构造函数参数类型为HttpResponseMessage,通过其设置状态码,错误消息短语以及消息体内容来向客户端抛出比较详细的错误信息.另一个参数类型为HttpStatusCode,只能设定状态码. 2自定义异常过滤器 扩展IExceptionFilter来定义异常过滤器.异常过滤器不会捕获类型为Htt

SpringBoot配置全局异常捕获

1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.java捕获到异常以ajax形式返回 MyExceptionHandler.java捕获到异常以页面形式返回 ajaxerror.html这个是测试返回ajax异常的页面 error.html以页面形式返回的异常到这个页面 1.1 页面跳转形式 1.1.1 配置 MyExceptionHandler.

springboot编程之全局异常捕获

springboot编程之全局异常捕获 1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice, 在方法上注解@ExceptionHandler(value = Exception.class),Exception.class表示拦截所有的异常信息 package com.imooc.web.controller; import com.imooc.exception.UserNotExistException; import org.spr

.NET 基础 一步步 一幕幕[数组、集合、异常捕获]

数组.集合.异常捕获 数组: 一次性存储多个相同类型的变量. 一维数组: 语法: 数组类型[] 数组名=new 数组类型[数组长度]; 声明数组的语法: A.数据类型 [] 数组名称= new 数据类型[2]{1,2}: B.数据类型 [] 数组名称 = new 数据类型[数组大小]; C. 数据类型 [] 数组名称 = {数据,数据,数据,数据}; ***数组的长度一旦固定了,就不能再被改变了 可以通过索引来访问数组中的元素: 数组名称[索引位置] 案例: 多维数组:多个线性数组的值 二维:i

异常捕获

异常捕获,在现在很多ide工具里都可以用快捷键很方便的添加上,防止用户看到自己看不懂的报错甚至莫名其妙崩溃,导致用户体验不好. 哪怕显示一个友好一些的崩溃提示,也比直接显示error:xxxx xxxxxxxxx要好得多. 当然最终的目的还是要给出对应的解决办法,让代码可以继续运行. 1 <?php 2 header("content-type:text/html; charset=utf-8"); 3 /** 4 * 包裹重量异常 5 */ 6 class HeavyParce