【发布时间】:2021-06-01 12:42:25
【问题描述】:
我的服务器充当用户搜索请求的代理。在 Azure 上请求数据之前,我们需要确保一切都是安全的。为此,我们将某些过滤器添加到查询过滤器中。 假设我的服务器收到了这个查询:
search=&$top=10&$filter=customer/customerId gt 1 and customer/customerId lt 5
我想把它拆开,一块一块地调查它的过滤器,并在里面注入一个安全过滤器。
我做的第一件事是得到过滤器:
var parsed = HttpUtility.ParseQueryString(query);
var filter = parsed["$filter"];
接下来,我想对其进行处理以进行验证和更改。
阅读this post 后,我正在尝试像这样使用ODataUriParser:
// 1. Create a dummy model
public static IEdmModel GetEdmModel()
{
var model = new EdmModel();
EdmEntityType customer = new EdmEntityType("Namespace", "Customer");
customer.AddKeys(customer.AddStructuralProperty("CustomerId", EdmPrimitiveTypeKind.Int32));
model.AddElement(customer);
return model;
}
// 2. Utilize it
static void Foo()
{
var query = "search=&$top=5001&$filter=Customer/CustomerId eq 1";
var parsed = HttpUtility.ParseQueryString(query);
var filter = parsed["$filter"];
var result = new ODataUriParser(HardCodedTestModel.TestModel, new Uri(filter, UriKind.Relative));
var parsedFilter = result.ParseFilter();
}
这向我抛出了一个异常,说:
未处理的异常。 Microsoft.OData.UriParser.ODataUnrecognizedPathException:资源不 为细分“客户”找到
- 我做错了什么?
- 有没有更简单的方法来实现我想要的?
【问题讨论】:
标签: c# .net parsing odata azure-cognitive-search