您的位置:首页 > 其它

Silverlight如何调用淘宝API

2012-06-19 13:57 429 查看
淘宝开放平台TOP并没有提供SL版本的SDK,其实是没有必要,也是不可能的。其原因有二:1、Siverlight默认不允许跨域访问,需要在被访问网站下面放置策略文件,Taobao不可能为我们放置一个策略文件的。2、你的taobao应用程序的appkey,appsecret,甚至是sessionkey都暴露在Silverlight前端了,这也太傻了吧!存在很大的安全隐患!SL直接调用Taobao Api是不可能的,怎么办呢?

  其实,我们只要将调用taobao的代码放到我们的服务器端就可以了,服务器获取到数据后再传到前端去。而SL和Web服务器通讯最好的方法莫过于WCF RIA Service了(谁还有更好的方法?)。关于调用Taobao API的流程,参见我以前的文章。下面我们以淘宝开放平台用户Api为例,演示一下如何调用并在silverlight中显示。

1.新建一个Silverlight业务应用程序

2.解决方案中添加一个WCF RIA Services类型的项目。这种类型的项目,其实是两个类库项目,一个供SL引用,一个带.web后缀的供服务器端引用。

3.在2中的web项目中,添加一个DomainService,代码如下:

[EnableClientAccess()]
public class TopService : DomainService
{
const string SERVICEURL = "http://gw.api.taobao.com/router/rest";
const string APPKEY = "your app key";
const string APPSECRET = "your app secret";

public Top.Api.Domain.User GetUser(string nick)
{
ITopClient client = new DefaultTopClient(SERVICEURL, APPKEY, APPSECRET);
UserGetRequest req = new UserGetRequest();

//要查询的字段
req.Fields = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created";
req.Nick = nick;
UserGetResponse res = client.Execute(req); //必要时传入Session key

return res.User;
}
}


4.SL中调用TopService的域服务:

private void GetUser_Click(object sender, System.Windows.RoutedEventArgs e)
{
TopService.Web.TopContext tc = new TopService.Web.TopContext();
tc.GetUser(tbName.Text,(lo) =>
{
this.userInfoGrid.DataContext = lo.Value;
},null);
}


完成了,就这么简单。用到哪个api就在我们的TopService中添加,SL调用就好了!当然了,权限控制还是要做好的,参见:[Silverlight]Wcf Ria Services权限控制的实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: