gpt4 book ai didi

c# - Web API 的 Lambda 表达式

转载 作者:太空狗 更新时间:2023-10-30 01:03:32 24 4
gpt4 key购买 nike

我正在尝试将 Lambda 表达式传递给 Web API 2 调用,但不确定如何进行。

让我给你一些背景

设置一个 Web API 2,利用 Entity Framework 与数据库通信。

我的应用程序最终调用 Web API 2 以便能够与数据库通信。我的公司最终需要这样做,以便为数据访问层增加安全性。

我们在应用程序端构建了一个存储库,可以很好地与 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;
}

我现在的问题是在 Controller 的 Web API 2 端如何让它接受 Lambda 表达式?我需要在 Controller 中放入什么才能看到这个?我需要转换 Lambda 表达式吗?

最佳答案

您不能直接将 Lamda 表达式传递给 Web Api 2。当您说必须以某种方式转换它时,您是对的。这里有几个选项。

使用数据

这适用于 Entity Framework,并附带 Visual Studio (2012/2013) 中的模板。 odata 位于 Web Api 2 之上。基本上,已经为您定义了一堆运算符(等于、包含、大于等)。借助 odata 和 Entity Framework ,一切都已为您完成。默认情况下,这应该已经是 Visual Studio 的一部分,这是微软插入的事情。 http://www.odata.org/

手动转换

Controller 中的每个方法都可以接收所需的参数(int skip、int take、string where、string order by),然后由您来应用它。这意味着您必须尝试并提出自己的规则和语法来完成这项工作。

使用动态 linq

如相关答案中所述。这是一种在运行时动态使用 linq build 的方法。您基本上可以在查询字符串中传递它并将其向前传递。您将必须弄清楚您的存储库接受什么与您的 Api 接受什么以及如何转换或传递它们。你还必须小心,不要允许超过你真正想要的。 http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

关于c# - Web API 的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com