您的位置:首页 > 编程语言 > ASP

ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)

2017-04-04 22:17 656 查看
业务场景:

在 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐