• webService启用cookie的另一种方法


    很多时候,我们希望用到asp.net的membership,这样就可以快速的处理角色验证之类的问题。而且客服端能够与bs系统共用一套账户。

    webservice里面的proxy类继承自WebClientProtocol,而在WebClientProtocol里面包含两个方法

    protected virtual WebRequest GetWebRequest(Uri uri);

    protected virtual WebResponse GetWebResponse(WebRequest request);

    我们应该很清楚,调用webservice本质上也是一个http的Post请求,和普通的html不一样的是,webservice请求的内容和服务返回的内容不是html,而是xml(soap协议)。再看这两个方法,所以proxy在调用service的时候,肯定会调用到这两个方法。所以,我们只要进行适当的重写这两个方法就OK了。

    private static string currentCookie = string.Empty;
            protected override WebRequest GetWebRequest(Uri uri)
            {
                WebRequest request = base.GetWebRequest(uri);
                if (!string.IsNullOrEmpty(currentCookie))
                {
                    request.Headers[HttpRequestHeader.Cookie] = currentCookie;
                }
                return request;
            }
            protected override WebResponse GetWebResponse(WebRequest request)
            {
                WebResponse response = base.GetWebResponse(request);
                if (!string.IsNullOrEmpty(response.Headers[HttpResponseHeader.SetCookie]))
                    currentCookie = response.Headers[HttpResponseHeader.SetCookie];
                return response;
            }
    

    我们直接从http请求的header里面去截取cookie,在放送之前,在Request的header上附加上cookie。

    服务端,web.config需要配置一下,

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>

    启用所有module通道,这样就会进行权限验证。

  • 相关阅读:
    图论分支-Tarjan初步-边双联通分量
    图论分支-Tarjan初步-割点和割边
    简谈图论重要性&&图论总结
    Angular本地数据存储LocalStorage
    (转)AngularJS中使用的表单验证
    (转)AngularJS判断checkbox/复选框是否选中并实时显示
    (转载)JavaScript世界万物诞生记
    (转载)关于My97 datepicker与Angular ng-model绑定问题解决。
    mysql
    mysql
  • 原文地址:https://www.cnblogs.com/Linjianyu/p/2548945.html
Copyright © 2020-2023  润新知