C#服务端 拦截器

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.ServiceModel.Channels; 5using System.ServiceModel.Description; 6using System.ServiceModel.Dispatcher; 7using System.Web; 8 9namespace Test 10{ 11 public class MyOperationInterceptorAttribute : Attribute, IOperationBehavior 12 { 13 public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters) 14 { } 15 public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation) 16 { } 17 public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation) 18 { 19 dispatchOperation.Invoker = new MyInvoker(dispatchOperation.Invoker); 20 } 21 public void Validate(OperationDescription operationDescription) 22 { } 23 } 24} 25 26using System; 27using System.Collections.Generic; 28using System.Linq; 29using System.Net; 30using System.ServiceModel; 31using System.ServiceModel.Dispatcher; 32using System.ServiceModel.Web; 33using System.Web; 34 35namespace Test 36{ 37 public class MyInvoker : IOperationInvoker 38 { 39 40 private readonly IOperationInvoker m_OldInvoker; 41 42 public MyInvoker(IOperationInvoker inner) 43 { 44 m_OldInvoker = inner; 45 } 46 47 public object Invoke(object instance, object[] inputs, out object[] outputs) 48 { 49 try 50 { 51 //这里可以进行一些权限验证 52 //do something 53 object result = m_OldInvoker.Invoke(instance, inputs, out outputs); 54 55 return result; 56 } 57 catch (Exception err) 58 { 59 outputs = new object[0]; 60 //do catch 61 return null; 62 } 63 finally 64 { 65 66 } 67 68 } 69 70 public virtual object[] AllocateInputs() 71 { 72 return m_OldInvoker.AllocateInputs(); 73 } 74 75 public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state) 76 { 77 return m_OldInvoker.InvokeBegin(instance, inputs, callback, state); 78 } 79 80 public object InvokeEnd(object instance, out object[] outputs, IAsyncResult result) 81 { 82 83 return m_OldInvoker.InvokeEnd(instance, out outputs, result); 84 85 } 86 87 public bool IsSynchronous 88 { 89 get 90 { 91 return m_OldInvoker.IsSynchronous; 92 } 93 } 94 } 95} 96 97public class srvtest 98    { 99        [WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json)] 100        [MyOperationInterceptor] 101        public string Hello() 102        { 103            return "Hello" + DateTime.Now.ToString(); 104        } 105      106        [WebGet(UriTemplate = "Index", ResponseFormat = WebMessageFormat.Json)]         107        public string Index() 108        { 109            return "Index" + DateTime.Now.ToString(); 110        }              111    }

在需要拦截的方法上添加 [MyOperationInterceptor]即可,不需要拦截的就不添加

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

C#服务端 拦截器 - HelloWorld