【发布时间】:2015-03-19 01:07:32
【问题描述】:
我正在尝试将 Lambda 表达式传递给 Web API 2 调用,但不知道如何进行。
让我给你一些背景
设置一个利用实体框架与数据库通信的 Web API 2。
我的应用程序最终调用 Web API 2 以便能够与数据库通信。我的公司最终需要这样做以增加数据访问层的安全性。
我们在 App 端构建了一个存储库,可以很好地与 Web API 通信。但是,我们要添加的函数之一是包含 Lambda 表达式的 FIND 函数。
public IEnumerable<T> FindAll(Func<T, bool> exp)
{
HttpClientHandler hndlr = new HttpClientHandler();
hndlr.UseDefaultCredentials = true;
HttpClient httpClient = new HttpClient(hndlr);
httpClient.BaseAddress = new Uri(ADMS.Utilities.Settings.DALService);
HttpResponseMessage response = httpClient.GetAsync(string.Format("api/{0}/{1}", typeof(T).Name, exp)).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<IEnumerable<T>>().Result.ToList();
}
return null;
}
我现在的问题是在控制器的 Web API 2 端,我如何让它接受 Lambda 表达式?我需要在控制器中放入什么才能看到这个?我需要转换 Lambda 表达式吗?
【问题讨论】:
-
相关:stackoverflow.com/questions/6443433/…。基本上,不是“开箱即用”,您可以序列化表达式树。但是你真的要允许这样做吗?
-
完全正确 - 不确定我是否想要更好的问题是我应该如何在控制器中执行查找选项,这样我就不会查询整个数据库
-
可以这么说,您确实在密封舱口的错误一侧这样做。定义一个足以满足您的案例的接口,并在另一端处理构建实际的 LINQ 查询。您想尽可能地限制输入。而不是传递
Func<T, bool>,你真的需要一些表达式树。理想情况下不Expression<Func<T, bool>>(选项太多),但是...
标签: c# asp.net-web-api lambda asp.net-mvc-5 asp.net-web-api2