.Net Core 迁移之坑一 《WebAPI Get请求参数传入输入带有[]不识别问题》
在Framwork 体系下 WebAPI项目 会有很多默认特性,例如:Get查询竟然支持三种数组查询方式
1.https://localhost:44390/api/values?status=1&status=2
2.https://localhost:44390/api/values?status[]=1&status[]=2
3.https://localhost:44390/api/values?status[0]=1&status[1]=2

直到客户端同鞋找到我,才发现第二种在.net core webapi 默认竟然不支持
于是google了好久加上询问大牛,才找到一个解决方案,就是通过 Conventions 解决
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.Primitives;
using System;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication
{
public class ArraryHandleQueryConvention : IParameterModelConvention
{
public void Apply(ParameterModel parameter)
{
if (parameter.ParameterType.IsArray || parameter.Attributes.OfType<FromQueryAttribute>().Any())
parameter.Action.Filters.Add(new ArrayQueryStringAttribute(parameter.ParameterName));
}
}
public class ArrayQueryStringValueProvider : QueryStringValueProvider
{
private readonly string _key;
private readonly IQueryCollection _values; public ArrayQueryStringValueProvider(IQueryCollection values)
: this(null, values)
{
} public ArrayQueryStringValueProvider(string key, IQueryCollection values)
: base(BindingSource.Query, values, CultureInfo.InvariantCulture)
{
_key = key;
_values = values;
} public override ValueProviderResult GetValue(string key)
{
var result = base.GetValue(key + "[]"); if (_key != null && _key != key)
{
return result;
}
if (result != ValueProviderResult.None)
{
var splitValues = new StringValues(result.Values.ToArray());
return new ValueProviderResult(splitValues, result.Culture);
}
return result;
}
} [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
public class ArrayQueryStringAttribute : Attribute, IResourceFilter
{
private readonly ArrayQueryStringValueProviderFactory _factory; public ArrayQueryStringAttribute(string key)
{
_factory = new ArrayQueryStringValueProviderFactory();
} public void OnResourceExecuted(ResourceExecutedContext context)
{
} public void OnResourceExecuting(ResourceExecutingContext context)
{
context.ValueProviderFactories.Insert(, _factory);
}
}
public class ArrayQueryStringValueProviderFactory : IValueProviderFactory
{
private readonly string _key; public ArrayQueryStringValueProviderFactory()
{
} public ArrayQueryStringValueProviderFactory(string key)
{
_key = key;
} public Task CreateValueProviderAsync(ValueProviderFactoryContext context)
{
context.ValueProviders.Insert(, new ArrayQueryStringValueProvider(_key, context.ActionContext.HttpContext.Request.Query));
return Task.CompletedTask;
}
}
}
StartUp 里面添加就行了如图

说者无意听者有心,后来大牛找到我说其实还有第二种方式 就是 JQueryQueryStringValueProviderFactory

1行代码就解决了有木有
看下结果大功告成

.Net Core 迁移之坑一 《WebAPI Get请求参数传入输入带有[]不识别问题》的更多相关文章
- .NET Core 迁移躺坑记
最近将自己负责的一个核心接口系统从.Net Framework迁移到了.Net Core. 整体过程,从业务层面说一般般吧(整体还好但还是搞的业务有感,没出严重故障)但是技术层面上感觉其实并没有达到要 ...
- .NET Core 迁移躺坑记续集--Win下莫名其妙的超时
继上一集里说到遇到的各种问题并且弄了n个解决方案之后,特别是对于问题4的解决方案对于切换了HttpClientFactory 我用了你家netcore 2.1下专门解决之前HttpClient口病已久 ...
- .Net Core 迁移之坑二 《ToString("F") 输出与windows不一致问题》
大家都知道 ToString("F") 是干什么的 这里我还是介绍一下 格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的 ...
- .NET CORE迁移踩坑
https://www.cnblogs.com/leolaw/p/10740678.html
- Asp.net webapi 判断请求参数是否为空简易方法 Model Validation 判断请求参数是否为空
通常情况下,对于那些经常为别人提供数据接口的开发人员来说,对于调用方传递过来的参数都会有验证处理.例如: if (string.IsNullOrEmpty(entity.Name)) { //当姓名为 ...
- webapi 获取请求参数
//获取请求消息提数据 Stream stream = filterContext.Request.Content.ReadAsStreamAsync().Result; Encoding encod ...
- ASP.Net Core开发(踩坑)指南
ASP.NET与ASP.NET Core很类似,但它们之间存在一些细微区别以及ASP.NET Core中新增特性的使用方法,在此之前也写过一篇简单的对比文章ASP.NET MVC应用迁移到ASP.NE ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
- .Net Core迁移到MSBuild平台(二)
一.前言 在上一篇文章.Net Core迁移到MSBuild的多平台编译问题中,简单的讲了下新的项目配置文件中的节点配置,这篇我将用一些例子来详细讲下从project.json迁移到msbuild过程 ...
随机推荐
- pycharm 设置 默认信息
在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings, 2 ...
- python考试
py4测试题 1.8<<2等于?322.通过内置函数计算5除以2的余数 divmod(5,2)3.s=[1,"h",2,"e",[1,2,3],&q ...
- Xcode And iOS9新特性
Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误 ...
- 【PL/SQL编程】注释说明
1. 单行注释 由两个连接字符“--”开始,后面紧跟着注释内容. 2. 多行注释 由/*开头, 由*/结尾.
- canvas 创建颜色渐变柱状图
最终结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- 原生js面向对象写法
Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑. var Mouse = function(id) { this.id = id; this.n ...
- NOIP模拟题 序列
题目大意 给定长为$n$的序列$A$,定义长为$k$的区间中位数为从小到大排完序后第$\lfloor\frac{k}{2}\rfloor$个数的大小. 每次询问给定$l_1,r_1,l_2,r_2$有 ...
- 重温CLR(二)生成、部署以及程序集
将类型生成到模块中 class Program { static void Main(string[] args) { Console.WriteLine("Hi"); } } 该 ...
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- vue 相邻自定义组件渲染错误正确的打开方式
话不多说看问题: 当封装自定义组件时例如(自定义下拉列表)两个相同的组件在多次v-if变化时偶尔会发生渲染错误,明明赋值正确但是组建中的ajax方法可能返回的数据乱掉,或者其他神逻辑错误. 经过查询发 ...