使用API Key验证WCF Data Service
时间:2022-04-23
本文章向大家介绍使用API Key验证WCF Data Service,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Ron Jacobs 有篇文章介绍如何在WCF Rest Service中使用API Key验证:http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx ,在WCF Data Service中怎么做呢?本文将介绍如何在WCF Data Service中使用API Key进行验证,主要代码来自于Ron Jacobs的这篇文章.
API Key作为一个参数在URL中传递, 在Rob Jacobs的WCFWebHttpLibrary.APIKeyAuthorization的方法string GetAPIKey(OperationContext operationContext)的代码如下:
1: public string GetAPIKey(OperationContext operationContext)
2: {
3: // Get the request message
4: var request = operationContext.RequestContext.RequestMessage;
5: // Get the HTTP Request
6: var requestProp =(HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
7: // Get the query string
8: NameValueCollection queryParams =
9: HttpUtility.ParseQueryString(requestProp.QueryString);
10:
11: // Return the API key (if present, null if not)
12: string apiKey = queryParams[APIKEY];
13: // Is the API Key available in the querystring?
14: if (apiKey == null)
15: {
16: // Is the API Key available in the header?
17: apiKey = requestProp.Headers[APIKEY];
18: }
19: return apiKey;
20: }
WCF Data Service的OnStartProcessingRequest 方法在处理每个请求之前调用。对于批处理请求,将会为顶级批处理请求调用一次,然后为批处理中的每个操作调用一次。 我们在这个方法里可以实施自定义验证的相关逻辑:
1: protected override void OnStartProcessingRequest(ProcessRequestArgs args)
2: {
3: var queryParams = HttpUtility.ParseQueryString(args.OperationContext.AbsoluteRequestUri.Query);
4: string apiKey = queryParams[APIKEY];
5: if (apiKey == null)
6: {
7: apiKey = args.OperationContext.RequestHeaders[APIKEY];
8: }
9: if (CheckValidAPIKey(apiKey))
10: {
11: base.OnStartProcessingRequest(args);
12: }
13: else
14: {
15: throw new System.Web.Services.Protocols.SoapException();
16: }
17:
18: }
19:
客户端调用的时候,可以在SendingRequest事件添加到请求的Header里头:
1: class Program
2: {
3: static void Main(string[] args)
4: {
5: Uri serviceUri = new Uri("http://localhost/ProfilesDataService");
6:
7: ServiceReference.YUPEntities service = new ServiceReference.YUPEntities(serviceUri);
8: service.SendingRequest += new EventHandler<System.Data.Services.Client.SendingRequestEventArgs>
9:
10: (service_SendingRequest);
11:
12: var items = service.Execute<UserProfile>(new Uri(http://localhost/ProfilesDataService/GetUserProfile?username='testvip')).ToList();
13: foreach (UserProfile profile in items)
14: {
15: Console.WriteLine(profile.Title);
16: }
17: }
18:
19: static void service_SendingRequest(object sender,System.Data.Services.Client.SendingRequestEventArgs e)
20: {
21: // when using api in the header...
22: e.Request.Headers.Add("APIkey", "918704ec-4811-45b6-a169-16bae3df69a8");
23:
24: }
25:
26: }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux搭建NFS文件共享服务器的步骤详解
- Windows和Linux实现远程桌面连接
- Ubuntu19.10开启ssh服务(详细过程)
- Ubuntu 18.04更换apt-get源的方法
- 浅谈Linux环境变量文件介绍
- linux创建线程之pthread_create的具体使用
- Ubuntu20.04安装搜狗输入法的详细步骤
- linux系统安装msf的过程详解
- Linux删除系统自带版本Python过程详解
- Linux时间子系统之时间的表示示例详解
- 如何在Linux中修改tomcat端口号
- centos7修改系统语言为简体中文的实现
- Linux 通过Rsync+Inotify实现本、异地远程数据实时同步功能
- linux实现猜数字小游戏源码
- linux编译kernel和svn版本冲突的解决办法