今天遇到一個問題,商城的購物車接口用.NET WebService開發的,PHP也想要購物車的數據。於是我就像平時用ajax跨域請求那樣直接給他鏈接,那麼問題來了。
1、通過url訪問完全沒有問題
2、PHP後臺代碼Getjson方法訪問不管怎樣都獲取不到數據。
ok,那麼說說解決方法吧,他那邊返回了一個安全機制的變量也就是說在鏈接後邊加一個隨機參數。
Eg:
一般普通的訪問方法:http://192.168.1.120:8090/web_service/UserControl.ashx?op=getShoping_Cart
添加一個隨機參數的訪問路徑:http://192.168.1.120:8090/web_service/UserControl.ashx?op=getShoping_Cart &callback=隨機參數(可空)
這樣就解決了安全顏色
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Ec.Admin.BLL;
using Ec.Admin.DAL;
using Ec.Admin.Model;
using Ec.Common;
using ZK_ECommerce.PubMethod;
using System.Text;
using Ec.Product.Model;
using Ec.Product.BLL;
namespace ZK_ECommerce.web_service
{
/// <summary>
/// UserControl 的摘要說明
/// </summary>
public class UserControl : IHttpHandler
{
public static UsersBLL bll=new UsersBLL();
public static UserDAL dal=new UserDAL();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.AddHeader("Access-Control-Allow-Origin", "*"); //解決跨域訪問
string urlHost= context.Request.Url.Authority;
string action = context.Request["op"];
string username = context.Request["username"];
string pwd = context.Request["pwd"];
string type = context.Request["type"];
string userid=context.Request["userid"];
string newpwd=context.Request["newpwd"];
string oldpwd=context.Request["oldpwd"];
string callBack = context.Request["callback"]; //獲取臨時變量
string returnText=string.Empty;
switch(action)
{
case "checkUserName":
returnText = checkUserName(username);
break;
case "Register":
returnText = Register(username, pwd, type, urlHost);
break;
case "GetMessageCode":
returnText=GetMessageCode(username,type);
break;
case "EditPwd":
returnText = EditPwd(Convert.ToInt32(userid), newpwd, oldpwd);
break;
case "getShoping_Cart":
returnText=getShoping_Cart();
returnText = callBack + "(" + returnText + ")";
break;
}
context.Response.Write(returnText);
}
public static string getShoping_Cart()
{
ProductImageBLL pImage = new ProductImageBLL();//商品圖片相關操作
Shopping_CartDAL dal = new Shopping_CartDAL();
List<Shopping_Cart> list = dal.GetAllShopping_CartByUser_Name("wangdechong");
StringBuilder sb = new StringBuilder();
if(list.Count>0)
{
sb.Append("{\"list\":[");
decimal tprice = 0;
for (int i = 0; i < list.Count; i++)
{
ProductImage prodImage = pImage.GetPrImageDetail(list[i].Product_Code).FirstOrDefault();
string imageUrl = string.Empty;
if (prodImage != null)
{
imageUrl = prodImage.Image_url;
}
sb.Append("{");
sb.Append("\"cart_id\": " + list[i].Id + ",");
sb.Append("\"goods_id\": \"" + list[i].Product_Code + "\",");
sb.Append("\"goods_name\": \"" + list[i].Product_Name + "\",");
sb.Append("\"goods_price\": " + list[i].Real_Price + ",");
sb.Append("\"goods_num\": " + list[i].Quantity + ",");
sb.Append(" \"goods_image\": \"" + imageUrl + "\",");
sb.Append(" \"goods_url\": \"/shop/item2.aspx?Product_Code=" + list[i].Product_Code + "\"");
if (i == (list.Count - 1))
{
sb.Append("}");
}
else
{
sb.Append("},");
}
tprice += list[i].Quantity * list[i].Real_Price;
}
sb.Append("],");
sb.Append("\"cart_price\": \"" + tprice + "\",");
sb.Append(" \"cart_num\": " + list.Count + "");
sb.Append("}");
return sb.ToString();
}
else
{
return "{\"cart_num\":0}";
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}