ASP.NET Web API 全局权限和异常处理
转自:http://yangpei.appsp0t.com/post/aglzfnlhbmdwZWlyDAsSBUVudHJ5GLkXDA
正文之前先解决一个问题
Web Api XML序列化的问题
目前大多Restful都支持XML和JSON两种返回格式,实际上XML谁会用呢?我选择直接干掉。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// ... var json = config.Formatters.JsonFormatter;
// 解决json序列化时的循环引用问题
json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
// 干掉XML序列化器
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}
下面进入正文
全局权限验证过滤器
新建一个类继承自AuthorizationFilterAttribute,它有一个虚方法OnAuthorization,在权限验证的时候调用,重写这个方法来验证权限。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class WebApiAuthAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
// 这是一个基本例子,使用的ASP.NET Forms 身份验证
var context = HttpContext.Current;
if (context.User.Identity.IsAuthenticated == false)
{
PreUnauthorized(actionContext);
return;
}
} private void PreUnauthorized(HttpActionContext actionContext)
{
// 如果用户没有登录,则返回一个通用的错误Model
actionContext.Response = actionContext.Request.CreateResponse(
HttpStatusCode.OK,
new AjaxModel
{
StatusCode = AjaxStatusCode.Unauthorized,
Message = "该操作需要用户登录"
});
}
}
最后只需要在WebApiConfig里面添加一个过滤器
config.Filters.Add(new WebApiAuthAttribute());
现在每一个请求都会验证权限
全局异常过滤器
新建一个类继承自ExceptionFilterAttribute,同样有一个虚方法OnException,重写这个方法来处理异常。
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
Logger.Error(actionExecutedContext.Exception);
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(
HttpStatusCode.OK,
new AjaxModel
{
StatusCode = AjaxStatusCode.InternalServerError,
Message = actionExecutedContext.Exception.Message
});
}
然后配置一下
config.Filters.Add(new WebApiErrorHandleAttribute());
最后所有的异常都是以自己的通用Model返出来的,和谐多了
ASP.NET Web API 全局权限和异常处理的更多相关文章
- ASP.NET Web API 全局权限和全局异常处理
在开发中,我使用json格式序列化,所以将默认的xml序列化移除 public static class WebApiConfig { public static void Register(Http ...
- ASP.NET Web API模型验证以及异常处理方式
ASP.NET Web API的模型验证与ASP.NET MVC一样,都使用System.ComponentModel.DataAnnotations. 具体来说,比如有:[Required(Erro ...
- 如何让Asp.net Web Api全局预防Xss攻击
一.概述 二.什么是XSS 三.预防方法 四.在WebApi中如何实现 在实现之前,需要了解ASP.NET WEB API的pipeline机制. 如上,可以采用多种方式进行参数的过滤 1.重写Del ...
- Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)
目前,在Web API中没有简单的方法来记录或处理全局异常(webapi1中).一些未处理的异常可以通过exception filters进行处理,但是有许多情况exception filters无法 ...
- Asp.Net Web API 2第七课——Web API异常处理
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来讲解Asp.Ne ...
- 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理
原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
- [翻译]ASP.NET Web API 2 中的全局错误处理
目录 已存在的选项 解决方案预览 设计原则 什么时候去用 方案详情 示例 附录: 基类详情 原文链接 Global Error Handling in ASP.NET Web API 2 由于翻译水平 ...
- ASP.NET Web API 中的异常处理(转载)
转载地址:ASP.NET Web API 中的异常处理
- Exception Handling in ASP.NET Web API webapi异常处理
原文:http://www.asp.net/web-api/overview/error-handling/exception-handling This article describes erro ...
随机推荐
- SSO-CAS单点登录
基本概念 单点登录SSO ,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS(Centeral Authenti ...
- React教程-初入
学习了React很久,一直没有机会总结下,最近打算写一个简单的React,希望让初学者一看就懂,不走弯路,我尽量写的简明点好了开始吧!首页我们要利用npm安装 react(当然你也可以用引用方式)跟着 ...
- sgu 125 Shtirlits dfs 难度:0
125. Shtirlits time limit per test: 0.25 sec. memory limit per test: 4096 KB There is a checkered fi ...
- 快速切题 sgu105. Div 3 数学归纳 数位+整除 难度:0
105. Div 3 time limit per test: 0.25 sec. memory limit per test: 4096 KB There is sequence 1, 12, 12 ...
- 如何最大限度提高.NET的性能
优化 .NET的性能 1)避免使用ArrayList. 因为任何对象添加到ArrayList都要封箱为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型.建议使 ...
- Tushare安装
在python中安装tushare踩坑记录一下: 安装 lxml requests bs4 pandas 不然一直提示错误.
- Log4j在Java工程中使用方法
Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...
- 玩转X-CTR100 l STM32F4 l SD卡FatFs文件系统
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器具有SD卡接口,本教程使用免费 ...
- DevExpress v17.2新版亮点—ASP.NET篇(二)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v17.2 的GridView Control. ...
- CUDA ---- Memory Model
Memory kernel性能高低是不能单纯的从warp的执行上来解释的.比如之前博文涉及到的,将block的维度设置为warp大小的一半会导致load efficiency降低,这个问题无法用war ...