- 浏览: 190391 次
- 性别:
- 来自: 广州
文章分类
最新评论
需求:
记录每个接口的请求参数及返回参数,方便以后回溯
filter的介绍
filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等;Web API提供两种过滤器的基本类型:actionfilterattribute,exceptionfilterattribute;两个类都是抽象类,actionfilter主要实现执行请求方法体之前(覆盖基类方法OnActionExecuting),和之后的事件处理(覆盖基类方法OnActionExecuted);exceptionfilter主要实现触发异常方法(覆盖基类方法OnException)。
下来就是写个信的filter来扑捉请求的和返回的信息,如下代码:
使用方式:
1、在每个方法添加此属性[WebApiActionDebugFilter]
2、在webapi的路由配置里增加
可能出现的问题:
注册WebApiActionDebugFilter时将它写在了FilterConfig文件中
运行时出现的错误提示:
给定的筛选器实例必须实现以下一个或多个筛选器接口: System.Web.Mvc.IAuthorizationFilter、System.Web.Mvc.IActionFilter、System.We
原因:FilterConfig是给MVC使用的,api用的是webapiconfig
参考学习:
https://www.cnblogs.com/mychris/p/5157655.html
https://www.cnblogs.com/duanjt/p/6734372.html
http://blog.csdn.net/xxj_jing/article/details/48806829
https://www.cnblogs.com/shi-meng/p/4635571.html
记录每个接口的请求参数及返回参数,方便以后回溯
filter的介绍
filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等;Web API提供两种过滤器的基本类型:actionfilterattribute,exceptionfilterattribute;两个类都是抽象类,actionfilter主要实现执行请求方法体之前(覆盖基类方法OnActionExecuting),和之后的事件处理(覆盖基类方法OnActionExecuted);exceptionfilter主要实现触发异常方法(覆盖基类方法OnException)。
下来就是写个信的filter来扑捉请求的和返回的信息,如下代码:
public class WebApiActionDebugFilter : System.Web.Http.Filters.ActionFilterAttribute { /// <summary> /// 是否开启调试 /// </summary> private bool _isDebugLog = true; public string DebugId { set { var session = System.Web.HttpContext.Current.Session; if (session != null) { session["RequestDebugId"] = value; } } get { var session = System.Web.HttpContext.Current.Session; if (session != null && session["RequestDebugId"]!=null) { return session["RequestDebugId"].ToString(); } return string.Empty; } } public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext context) { base.OnActionExecuting(context); //记录请求内容 if (_isDebugLog) { try { var guid = System.Guid.NewGuid().ToString(); DebugId = guid; var session = System.Web.HttpContext.Current.Session; var request = System.Web.HttpContext.Current.Request; var keys = request.Form.AllKeys; var task = context.Request.Content.ReadAsStreamAsync(); var content = string.Empty; using (System.IO.Stream sm = task.Result) { if (sm != null) { sm.Seek(0, SeekOrigin.Begin); int len = (int) sm.Length; byte[] inputByts = new byte[len]; sm.Read(inputByts, 0, len); sm.Close(); content = Encoding.UTF8.GetString(inputByts); } } string pars = string.Format("请求:\r\n id = {3};\r\n sessionId = {0};\r\n url = {1};\r\n contentType = {4};\r\n content = {2};" ,""// (session==null)?"...":session.SessionID , request.RawUrl , content , guid , request.ContentType); } catch (Exception ex) { } } } public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext context) { base.OnActionExecuted(context); //记录请求内容 if (_isDebugLog) { try { var session = System.Web.HttpContext.Current.Session; var task = context.Response.Content.ReadAsStringAsync(); var txt = task.Result; string pars = string.Format("响应:\r\n id = {2};\r\n sessionId = {0};\r\n response = {1}" , ""//(session == null) ? "..." : session.SessionID , txt , DebugId); } catch (Exception ex) { } } } }
使用方式:
1、在每个方法添加此属性[WebApiActionDebugFilter]
2、在webapi的路由配置里增加
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "WebApi/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); //注册 config.Filters.Add(new WebApiActionDebugFilter());
可能出现的问题:
注册WebApiActionDebugFilter时将它写在了FilterConfig文件中
运行时出现的错误提示:
给定的筛选器实例必须实现以下一个或多个筛选器接口: System.Web.Mvc.IAuthorizationFilter、System.Web.Mvc.IActionFilter、System.We
原因:FilterConfig是给MVC使用的,api用的是webapiconfig
参考学习:
https://www.cnblogs.com/mychris/p/5157655.html
https://www.cnblogs.com/duanjt/p/6734372.html
http://blog.csdn.net/xxj_jing/article/details/48806829
https://www.cnblogs.com/shi-meng/p/4635571.html
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 525项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 589原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 786在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 987hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2684先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1046///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2324服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 712本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 650原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9531、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 686写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 526需要单独引入的是COM中的Microsoft Office 1 ... -
给上传的文件生成缩略图(图片和视频)
2018-11-28 17:47 892备注:里面用到的ffmpeg ... -
获取视频文件的截图
2018-11-28 17:36 702视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1597在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
DataTable导出excel
2018-11-02 16:36 1152网上有很多关于导出的例子,这里讲一个利用NPOI导出excel ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4787具体的错误描述: 未能加载文件或程序集“System.Net. ... -
将app请求的简单json串转化为字典
2017-11-16 11:18 821通过Newtonsoft的DeserializeObject& ... -
WebAPI启用session功能
2017-11-16 11:04 1768第一步:简单建立两个类,以备修改WebApi的路由方式 第一 ... -
超过了最大请求长度。System.Web.HttpException
2017-11-13 16:50 2430请在服务器端配置 方法一: 在通过WebSer ...
相关推荐
9. **测试(Testing)**:WebAPI易于测试,可以通过模拟HTTP请求库如`HttpClient`进行单元测试和集成测试。 10. **版本控制(Versioning)**:在大型项目中,版本控制是必须的。可以通过URL路径、请求头或查询字符...
在Web开发领域,Web API是用于构建服务端应用程序的关键组件,它允许客户端通过HTTP协议进行数据交互。在本文中,我们将深入探讨...通过理解这些基本概念和示例代码,你可以更好地理解和实现Web API中的POST请求功能。
7. **过滤器(Filters)**:Web API支持过滤器,如授权、异常处理和日志记录,这些都是可重用的代码段,可以应用于多个控制器方法。 8. **媒体类型格式化(Media Type Formatters)**:Web API提供了媒体类型格式化...
控制器处理HTTP请求,路由决定哪些请求应由哪个控制器处理,模型绑定将请求数据绑定到控制器方法的参数,而动作筛选器则可以用来执行全局性的任务,如身份验证和日志记录。 2. **发布到IIS服务器**:IIS(Internet ...
4. **过滤器**:Web API 2 提供了过滤器系统,如授权过滤器、异常过滤器和日志记录过滤器,使得开发者可以通过全局或特定操作应用统一的行为逻辑。 5. **OData支持**:ASP.NET Web API 2 支持OData协议,允许客户端...
5. **错误处理和日志记录**:确保捕获并记录上传和下载过程中出现的任何错误,以方便调试和监控系统健康状况。 在提供的`UploadServer-master`压缩包中,可能包含了示例代码,包括了实现上述功能的控制器、模型、...
5. **HTTP消息处理(Message Handlers)**:消息处理器是WebAPI中处理请求和响应的中间件层。它们可以用来进行身份验证、日志记录、格式化响应等任务,按照注册顺序逐个处理请求和响应。 6. **媒体类型格式化...
在ASP.NET Core中,WebAPI用于构建RESTful API服务,可以处理HTTP请求并返回数据。 创建一个新的ASP.NET Core Web API项目,我们首先要安装.NET Core SDK,然后使用命令行工具`dotnet new webapi -n MyApi`来初始化...
// 记录日志或显示错误信息 Debug.WriteLine(ex.Message); return null; } } } ``` 在WPF界面控件(如按钮)的事件处理程序中,你可以调用这个方法,并使用await关键字等待异步操作完成,同时更新UI: ```...
WebApi 示例是一个基于C#开发的应用程序,展示了如何利用ASP.NET Web API框架构建RESTful服务。Web API是Microsoft为构建HTTP服务提供的一种高效且灵活的框架,它支持各种客户端,包括浏览器和移动设备。这个RAR文件...
3. **过滤器**:过滤器是ASP.NET Web API中一种可复用的代码段,可以应用于整个应用、控制器或特定的动作,如身份验证、异常处理和日志记录。 4. **媒体类型格式化**:Web API支持多种数据格式,如JSON和XML,自动...
在ApiServer_WebApi2中,ELMAH被集成来收集和记录服务器端的错误信息,帮助开发者追踪和诊断问题。它可以自动捕获、记录并显示HTTP请求期间发生的任何异常,同时提供了查看、搜索和导出日志的功能。 **Owin ...
8. **异常处理和错误日志**: 项目中应有适当的错误处理机制,如全局异常过滤器,以捕获并处理可能出现的异常,同时记录错误日志,便于问题排查。 9. **安全性考虑**: 除了JWT身份验证外,项目可能还涉及到其他安全...
4. **数据序列化与反序列化**:WebAPI通常返回JSON或XML格式的数据,工具类可以帮助我们将对象转换为这些格式,或者从请求中解析出数据对象。例如,我们可以创建一个`JsonHelper`类,包含`ToJson`和`FromJson`方法,...
本文主要根据中间件来实现对.net core webapi中产生的请求和响应数据进行获取并存入日志文件中; 这里不详细介绍日志文件的使用。你可以自己接入NLog,log4net,Exceptionless等 创建接口记录的中间件 using ...
6. **过滤器**:过滤器在Web API中用于执行全局或特定操作的逻辑,如授权、日志记录和异常处理。这部分将解释过滤器的生命周期和如何编写自定义过滤器。 7. **媒体类型格式化**:Web API可以自动序列化和反序列化...
5. **配置**:Web.config文件通常包含WebAPI的配置信息,如路由规则、日志记录、错误处理等。 6. **过滤器**:过滤器可以应用于控制器或动作,提供跨切面的功能,如授权、缓存、异常处理等。 7. **媒体类型格式化...
通过研究和学习这个WebApiDemo2017项目,开发者不仅可以了解Web API的基本架构,还能掌握如何集成各种实用功能,提升API开发的效率和质量。这是一个很好的学习资源,尤其对于初学者或者希望优化API开发流程的开发者...
过滤器是一种强大的特性,可以应用于控制器或特定操作,执行预处理或后处理任务,如授权、异常处理和日志记录。例如,`AuthorizeAttribute`用于实现基本的身份验证。 8. **媒体类型格式化(Media Type Formatters...