C# WebApi 查询参数解析

标签 c# asp.net-web-api query-string querystringparameter

我有一个来自 jquery 网格的查询字符串,我试图将其解析为 C# Web API 中的参数,但我无法获取要填充的属性之一。

查询字符串:

?current=1&rowCount=10&sort[received]=desc&sort[email]=asc&sort[id]=desc&searchPhrase=

方法:

public IEnumerable<IUserDto> Get(int current, int rowCount, NameValueCollection sort, string searchPhrase)

“排序”参数始终为空,所有其他参数均正确填充。我已经为参数尝试了多种类型,但无论我尝试了什么,我总是以空参数结束。

如有任何关于参数类型的指示或建议,我们将不胜感激。

最佳答案

如果要反序列化复杂的聚合值,例如查询字符串中的 NameValueCollection,则需要使用 FromUriAttribute 修饰参数。这并不能保证它会以任何方式工作,但除非您定义了自定义参数处理程序,否则它不会工作。

public IEnumerable<IUserDto> Get(
    int current,
    int rowCount,
    [FromUri] NameValueCollection sort,
    string searchPhrase
) { ... }

此外,您需要确保序列化到 URL 中的内容实际上是 JSON 格式的字典。从您发布的 URL 来看,您似乎正在添加来自本地对象的 receivedidemail 属性作为单独的查询字符串参数

&sort[received]=desc&sort[email]=asc&sort[id]=desc

WebAPI 的参数绑定(bind)不会为您自动将这些聚合到字典中。

你可以像这样构建它

var sortParam = ['received', 'id', 'email'].reduce(function (o, key) {
  o[key] = sort[key];
  return o;
}, {});

var queryParams = '?current=' + 1 + 
                  '&rowCount' = 10 + 
                  '&sort=' + JSON.stringify(sortParam) +
                  '&searchPhrase=' + something;

我还建议更改顺序,以便 sort 参数排在最后。

关于C# WebApi 查询参数解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960856/

相关文章:

C# "Constant Objects"用作默认参数

C# 如何使用 "new"属性设置隐藏属性?

asp.net-mvc - ASP.NET 网络 API : authenticating using in memory hosting for Integration tests

url - URL 参数和查询字符串有什么区别?

django - 如何使用查询参数构造 Django 反向/url?

c# - Fluent NHibernate 实体 HasMany 不同子类类型的集合

c# - 我可以在经典 .NET 4.6.1 应用程序中使用 .NET Standard 2.0 包吗?

c# - Web API 中的异常处理并返回 JSON

c# - 简单注入(inject)器 Web Api Controller 构造函数注入(inject)失败

asp.net - 在页面之间传递数据的最佳实践