当前位置:   article > 正文

C#服务端 拦截器

myoperationinterceptor
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.ServiceModel.Channels;
  5. using System.ServiceModel.Description;
  6. using System.ServiceModel.Dispatcher;
  7. using System.Web;
  8. namespace Test
  9. {
  10. public class MyOperationInterceptorAttribute : Attribute, IOperationBehavior
  11. {
  12. public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)
  13. { }
  14. public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
  15. { }
  16. public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
  17. {
  18. dispatchOperation.Invoker = new MyInvoker(dispatchOperation.Invoker);
  19. }
  20. public void Validate(OperationDescription operationDescription)
  21. { }
  22. }
  23. }

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.ServiceModel;
  6. using System.ServiceModel.Dispatcher;
  7. using System.ServiceModel.Web;
  8. using System.Web;
  9. namespace Test
  10. {
  11. public class MyInvoker : IOperationInvoker
  12. {
  13. private readonly IOperationInvoker m_OldInvoker;
  14. public MyInvoker(IOperationInvoker inner)
  15. {
  16. m_OldInvoker = inner;
  17. }
  18. public object Invoke(object instance, object[] inputs, out object[] outputs)
  19. {
  20. try
  21. {
  22. //这里可以进行一些权限验证
  23. //do something
  24. object result = m_OldInvoker.Invoke(instance, inputs, out outputs);
  25. return result;
  26. }
  27. catch (Exception err)
  28. {
  29. outputs = new object[0];
  30. //do catch
  31. return null;
  32. }
  33. finally
  34. {
  35. }
  36. }
  37. public virtual object[] AllocateInputs()
  38. {
  39. return m_OldInvoker.AllocateInputs();
  40. }
  41. public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state)
  42. {
  43. return m_OldInvoker.InvokeBegin(instance, inputs, callback, state);
  44. }
  45. public object InvokeEnd(object instance, out object[] outputs, IAsyncResult result)
  46. {
  47. return m_OldInvoker.InvokeEnd(instance, out outputs, result);
  48. }
  49. public bool IsSynchronous
  50. {
  51. get
  52. {
  53. return m_OldInvoker.IsSynchronous;
  54. }
  55. }
  56. }
  57. }
  1. public class srvtest
  2.     {
  3.         [WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json)]
  4.         [MyOperationInterceptor]
  5.         public string Hello()
  6.         {
  7.             return "Hello" + DateTime.Now.ToString();
  8.         }
  9.      
  10.         [WebGet(UriTemplate = "Index", ResponseFormat = WebMessageFormat.Json)]        
  11.         public string Index()
  12.         {
  13.             return "Index" + DateTime.Now.ToString();
  14.         }             
  15.     }

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

转载于:https://my.oschina.net/berthome/blog/1525506

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/885575
推荐阅读
相关标签
  

闽ICP备14008679号