C# URI查询字符串JsonSerializerSettings和Asp.Net核心
在.NETCore1.1中 下面的代码段适用于输入/输出(正文)格式 //配置服务C# URI查询字符串JsonSerializerSettings和Asp.Net核心,c#,asp.net-core,C#,Asp.net Core,在.NETCore1.1中 下面的代码段适用于输入/输出(正文)格式 //配置服务 .AddJsonOptions(jsonOption => { jsonOption.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy(true, true) }; }) 我希望查询字符串也具有相
.AddJsonOptions(jsonOption =>
{
jsonOption.SerializerSettings.ContractResolver = new DefaultContractResolver()
{
NamingStrategy = new SnakeCaseNamingStrategy(true, true)
};
})
我希望查询字符串也具有相同的行为
示例:
/url/GetData?系统名称=英特尔&is\u活动=真
原料药
公共类系统控制器:控制器
{
公共列表GetData([FromQuery]字符串SystemName,FromQuery]bool IsActive)
{
Assert.Equals(“英特尔”,系统名);
Assert.Equals(true,IsActive);
返回null;
}
}
任何关于如何使用Camelcase返回查询字符串模型绑定的建议。
提前谢谢
另外,如果您需要任何进一步的信息,请告诉我。:)
public class SystemController : Controller
{
public List<string> GetData([FromQuery]string SystemName, FromQuery]bool IsActive)
{
Assert.Equals("intel", SystemName);
Assert.Equals(true, IsActive);
return null;
}
}
using System;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Application.ValueProviders
{
public class CamelCaseQueryStringValueProviderFactory : IValueProviderFactory
{
public Task CreateValueProviderAsync(ValueProviderFactoryContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
return AddValueProviderAsync(context);
}
private async Task AddValueProviderAsync(ValueProviderFactoryContext context)
{
var collection = context.ActionContext.HttpContext.Request.Query
.ToDictionary(t => ToCamelCaseFromSnakeCase(t.Key), t => t.Value, StringComparer.OrdinalIgnoreCase);
var valueProvider = new QueryStringValueProvider(
BindingSource.Query,
new QueryCollection(collection),
CultureInfo.InvariantCulture);
context.ValueProviders.Add(valueProvider);
}
private string ToCamelCaseFromSnakeCase(string str)
{
return str.Split(new[] { "_" },
StringSplitOptions.RemoveEmptyEntries).
Select(s => char.ToUpperInvariant(s[0]) + s.Substring(1, s.Length - 1)).
Aggregate(string.Empty, (s1, s2) => s1 + s2);
}
}
}