ASP.NET Web API 全局权限和全局异常处理
在开发中,我使用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
});
}
最后只需要在WebApiConfig里面添加一个过滤器
config.Filters.Add(new WebApiErrorHandleAttribute());
ASP.NET Web API 全局权限和全局异常处理的更多相关文章
- [翻译]ASP.NET Web API 2 中的全局错误处理
目录 已存在的选项 解决方案预览 设计原则 什么时候去用 方案详情 示例 附录: 基类详情 原文链接 Global Error Handling in ASP.NET Web API 2 由于翻译水平 ...
- 【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.0 统一响应格式
传统实现 在搭建 Web API 服务的时候,针对客户端请求,我们一般都会自定义响应的 JSON 格式,比如: { "Data" : { "Id" : 100, ...
- Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)
目前,在Web API中没有简单的方法来记录或处理全局异常(webapi1中).一些未处理的异常可以通过exception filters进行处理,但是有许多情况exception filters无法 ...
- 如何让Asp.net Web Api全局预防Xss攻击
一.概述 二.什么是XSS 三.预防方法 四.在WebApi中如何实现 在实现之前,需要了解ASP.NET WEB API的pipeline机制. 如上,可以采用多种方式进行参数的过滤 1.重写Del ...
- ASP.NET Web API 2 对 CORS 的支持
CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略, ...
- ASP.NET Web API 2 使用 DelegatingHandler(委托处理程序)实现签名认证
Ø 前言 在前一篇ASP.NET Web API 2 使用 AuthorizationFilter(授权过滤器)实现 Basic 认证文章中实现了采用 Basic 认证的方式,但是这种方式存在安全隐 ...
- ASP.NET Web API 2 过滤器
Ø 前言 我们知道 ASP.NET Web API 过滤器,也是属于消息处理机制中的一部分.正因如此,我们经常使用它来完成对请求的授权验证.参数验证,以及请求的 Log 记录,程序异常捕获等. 1. ...
- ASP.NET WEB API处理流程
前言:大图请看 http://www.asp.net/posters/web-api/ASP.NET-Web-API-Poster.pdf Web Api Hosting 我们不仅可以通过Web应用程 ...
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
适用于app.config与web.config的ConfigUtil读写工具类 之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...
随机推荐
- 如何使用coding.net
由于我有一位十分聪明能干的室友会使用coding.net,于是我决定奉献一下室友的智慧,告诉大家如何使用conding.net上交作业.(如有说错的地方希望大家可以指出来) 首先登陆codin ...
- 数据结构大二课程设计:QT实现线段树
源码以及编译文件下载地址:http://download.csdn.net/detail/zhiyanpianyu1234/9445909#comment 加入了一些小东西,一直觉得课设是做给自己看的 ...
- django中抽象基类的Foreignkey的定义
class base(models.Model): user = models.ForeignKey(User) class Meta: abstract =True 以上是抽象基类的定义,只有一个公 ...
- PHP 常量
1.__NAMESPACE__ http://php.net/manual/zh/language.namespaces.nsconstants.php
- Resizing the disk space on Ubuntu Server VMs running on VMware ESXi 5
from: http://www.joomlaworks.net/blog/item/168-resizing-the-disk-space-on-ubuntu-server-vms-running- ...
- 学 Redux (转)
0.官方文档:http://redux.js.org/ 中文版本 : http://cn.redux.js.org/ 中文版本(好!): http://www.css88.com/react/d ...
- 【leetcode】Scramble String
Scramble String Given a string s1, we may represent it as a binary tree by partitioning it to two no ...
- html常用标签的使用方法
1 html标题 <h1> to <h6> <!DOCTYPE html> <html lang="en"> <head&g ...
- 使用宏批量将多个csv文件转成excel文件
在一个压缩文件中有100多个csv文件,要求要将此100多个csv文件转成excel文件,名字命名不变,有三种方式: 1. 傻不拉几的复制粘贴法 2. 一个一个打开csv文件,另存为xls文件,工作量 ...
- delphi cxgrid 使用方法
delphi cxgrid 使用方法1.绑定数据 方法 cxGrid1DBTableView1.DataController.DataSource:=DataSource12.去掉"Drag ...