我想重建我的上一个项目。
过去,我没有使用任何 Web API。
我可以使用 ODataQueryOptions 来执行 $filter、$orderby 、$top 、$skip 操作吗
对于我自己的 handler.ashx 中的查询?
就像是。
var option = new ODataQueryOptions(request.params);
var query = option.ApplyTo(db.products);
根据上面 sfuqua 的回答,我制作了自己的帮助程序类,该类基于 Odata Uri 构建 OdataQueryOptions 类:
using System.Linq;
using System.Net.Http;
using System.Web.Http.OData;
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Query;
namespace OdataHelpers
{
public static class ODataBuilder<T>
{
public static ODataQueryOptions<T> BuildOptions(string oDataUri)
{
var baseUri = "";
var odUri = "";
var spl = oDataUri.Split('?');
if (spl.Count() == 0)
odUri = spl[0];
else
{
baseUri = spl[0];
odUri = spl[1];
}
if (string.IsNullOrEmpty(baseUri))
baseUri = "http://localhost/api/" + typeof(T).Name;
var request = new HttpRequestMessage(HttpMethod.Get, baseUri + "?" + oDataUri.Replace("?", ""));
var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.AddEntity(typeof(T));
var edmModel = modelBuilder.GetEdmModel();
var oDataQueryContext = new ODataQueryContext(edmModel, typeof(T));
return new ODataQueryOptions<T>(oDataQueryContext, request);
}
}
}
使用示例:
var OdataStuff = ODataBuilder<CustomerIntView>.BuildOptions("$orderby=Id");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)