两个同子域,一个子域访问另一个子域下接口,解决form验证的问题

最近在项目中,遇到一个给另一个子域提供得到用户名的一个接口(.ashx文件),可是在后台访问接口url时,总是通过不了验证。

查其原因,是由于在后台访问其接口,是不带什么东西的去访问。这样,接口页面的form验证是根本通不过的。

在一翻周折下,查了一些资料,最后将另一个子域下的所有cookie找到,然后连同cookie发送到请求页面,以此来通过接口中的form验证。

protected void Page_Load(object sender, EventArgs e)
2 {
3 if (HttpContext.Current.User.Identity.IsAuthenticated) //是否通过登陆
4 {
5 string userId = HttpContext.Current.User.Identity.Name; //拿到用户登陆ID
6 Response.Write(HttpContext.Current.User.Identity.Name);
7 string strUrl = "http://***.com/api/auth.ashx?action=getname";
8 Response.Write(Auth(strUrl));
9 }
10 else
11 {
12 Response.Write("你没有通过验证");
13 }
14
15 }
16
17 public string Auth(string strurl)
18 {
19 HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strurl);
20 myRequest.Method = "Get";
21 StringBuilder cookieStr = new StringBuilder();
22 string[] arrCookie = Request.Cookies.AllKeys;
23
24 //读取本地form验证的cookie,找到你要的xxauth Cookie名。
25 for (int i = 0; i < arrCookie.Length; i++)
26 {
27 HttpCookie hc = Request.Cookies[arrCookie[i]];
28 if ((hc.Name.Equals(".xxauth", StringComparison.OrdinalIgnoreCase)) && (hc.Value != null))
29 {
30 cookieStr.Append(Server.UrlEncode(hc.Name) + "=" + Server.UrlEncode(hc.Value));
31 }
32 }
33
34 Uri uri = new Uri(strurl);
35 myRequest.CookieContainer = new CookieContainer();
36 myRequest.CookieContainer.SetCookies(uri, cookieStr.ToString());//连同cookie发送到请求的接口
37 myRequest.Timeout = 300000;
38
39 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
40 Stream myResponseStream = myResponse.GetResponseStream();
41 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("UTF-8"));
42 string outdata = myStreamReader.ReadToEnd();
43 //把数据从HttpWebResponse的Response流中读出
44 myStreamReader.Close();
45 myResponseStream.Close();
46
47 return outdata;//查看返回结果集
48 }

 

posted @ 2010-02-04 18:29  旧事重播__、  阅读(405)  评论(0编辑  收藏  举报