ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)
2017-04-04 22:17
656 查看
业务场景:
在 ASP.NET Core 项目中,所有的代码都是骆驼命名,比如
具体实现:
请求和响应参数格式转换(请求具体是非
查询参数实现比较麻烦点(具体为
实现原理就是截获请求,并对
参考资料:
snake_case JSON with ASP.NET Core MVC
Web Api Parameter binding: snake_case to camelCase
Model binding in ASP.NET Core to map underscores to title case property names
在 ASP.NET Core 项目中,所有的代码都是骆驼命名,比如
userName, UserName,但对于 WebApi 项目来说,因为业务需要,一些请求、查询和响应参数的格式需要转换,比如转换成下划线命名(又称为
snake case),比如
user_name。
具体实现:
请求和响应参数格式转换(请求具体是非
get请求,响应参数一般为
json),ASP.NET Core 实现很简单,
Startup只需要下面配置代码:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() }); }
查询参数实现比较麻烦点(具体为
get请求,比如
users?user_name=xishuai&user_id=1),实现代码:
public class RewriteQueryStringMiddleware { private readonly RequestDelegate _next; //Your constructor will have the dependencies needed for database access public RewriteQueryStringMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { var query = context.Request.QueryString; if (query.HasValue) { var parms = string.Join("&", query.Value.TrimStart('?').Split('&').Select(s => { var kv = s.Split('='); var k = kv[0].Replace("_", ""); var v = kv[1]; return $"{k}={v}"; })); QueryString newQuery = new QueryString($"?{parms}"); context.Request.QueryString = newQuery; } //Let the next middleware (MVC routing) handle the request //In case the path was updated, the MVC routing will see the updated path await _next.Invoke(context); } } public static class RewriteQueryStringExtensions { public static IApplicationBuilder UseRewriteQueryString(this IApplicationBuilder builder) { return builder.UseMiddleware<RewriteQueryStringMiddleware>(); } }
实现原理就是截获请求,并对
QueryString转换和重写,
Startup中添加配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseRewriteQueryString(); }
参考资料:
snake_case JSON with ASP.NET Core MVC
Web Api Parameter binding: snake_case to camelCase
Model binding in ASP.NET Core to map underscores to title case property names
相关文章推荐
- 自动化CodeReview - ASP.NET Core请求参数验证
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- asp.net core生成路由连接,请求参数如何获取和模型绑定
- ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
- 如何测量并报告ASP.NET Core Web API请求的响应时间
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
- 解决Asp.net Web网站发布到服务器上运行时,某界面传参数过多,造成的“此请求的查询字符串的长度超过配置的 maxQueryStringLength 值”错误。
- 逐步解析ASP.NET请求响应流程图(B/S IIS)
- asp.net sqlparameter 传参数模糊查询
- 请求帮助。 如何使用(c#)asp.net编写域名查询功能?
- 光脚丫学ASP.NET MVC(0010):通过操作参数更快捷访问请求数据
- asp.net like 组合查询参数构造及分页
- ASP.Net 请求响应流程简述
- asp.net响应带参数的网址?&
- Asp.net 2.0 中.aspx请求,即如何生成响应的Html文件(原创)
- 【转】ASP.Net 请求响应流程简述
- ASP.Net 请求响应流程简述
- Ajax基础-服务器端ASP.net脚本请求和响应
- ASP.Net 请求响应流程简述
- ASP.NET MVC:Expression Trees 作为参数简化查询