c# – 拦截OData“查询”
发布时间:2020-12-15 21:02:40 所属栏目:百科 来源:网络整理
导读:我想“拦截”/改变在使用OD API与Web API时生成的OData查询..但我不完全确定如何“提
我想“拦截”/改变在使用OD API与Web API时生成的OData查询..但我不完全确定如何“提取”生成的查询..我假设OData过滤器,扩展和更多的一些如何生成某种表达式树或某种查询…如果是这种情况,那么我希望能够在它作为SQL命令发送到数据库之前更改的查询类型.
我在网上搜索了一些提取生成的表达式树的方法..但是无法找到足够的信息,所以我有点希望有人能更深入地了解整个OData-“框架”是如何工作的.. 任何从哪里开始的想法? 解决方法
您可以在执行之前更改Odata网址.继承自EnableQueryAttribute类并更改URL.以下是在将guid字符串格式发送到oracle之前将其更改为十六进制字符串格式的真实案例.
public class EnableQueryForGuid : EnableQueryAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { var url = actionContext.Request.RequestUri.OriginalString; var newUrl = ModifyUrl(url); actionContext.Request.RequestUri = new Uri(newUrl); base.OnActionExecuting(actionContext); } private string ModifyUrl(string url) { Regex regex = new Regex(@"%27([A-Za-z0-9]{32})%27"); var res = regex.Matches(url); if (res.Count > 0) { var guidPart = res[0].Value.Remove(0,3); guidPart = guidPart.Remove(guidPart.Length - 3,3); var guidValue = new Guid(BitConverter.ToString((new Guid(guidPart)).ToByteArray()).Replace("-","")); url = url.Replace(res[0].Value,guidValue.ToString()); } return url; } } 然后在控制器方法上使用这个新属性: [HttpGet] [EnableQueryForGuid] [ODataRoute("GetSomething")] public IHttpActionResult GetSomething() { .... } 原始查询:
更改查询:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |