asp.net core webapi项目
1.项目Startup文件 ConfiguratureService() 添加
csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(o =>
{
//统一输入内容格式
o.InputFormatters.Insert(0, new RsInputFormatter());
//统一的消息返回格式
o.OutputFormatters.Insert(0, new RsOutputFormatter("yyyy-MM-dd"));
})
}
- api的消息将统一返回如下格式
json
{
"success":true
,"code":200
,"msg":"your custom msg"
,"targetUrl":null
,"result":"your custom result object"
}
返回结果是IActionResult类型
原样返回结果 当使用AppException
抛错误时,还需要调用一个中间件
csharp
app.UseExceptionHandler("/home/error"); //mvc模式下报错,指定出错后跳转的页面
返回结果不是IActionResult类型
以/api/开头地址
返回结果为统一的格式
json
{
"success":true
,"code":200
,"msg":"your custom msg"
,"targetUrl":null
,"result":"your custom result object"
}
非/api/开头的地址
数据格式原样返回 当使用AppException
抛错误时,还是会返回指定json格式的错误信息
其它说明
POST请求,服务端参数定义[FormBody]Class model
客户端要保证 header中"Content-Type":"application/json;charset=utf-8"
js
$.ajax({
url: '/api/password/change',
type: 'put',
data: JSON.stringify(data.field), //转字符,否则可能出现400
contentType: 'application/json', //不写可能出现415
success: function(ret) {
if (ret.success)
{
layer.msg(ret.msg, { icon: 1,time: 3000})
}
else
{
layer.msg(ret.msg, { icon: 2, time: 3000 });
}
},
error: function(err) { }
});
客户端的参数如果是json,要转成字符串后发送到服务器,例var d=JSON.stringify(data);
如果想要对http 401,http 403的响应结果进行json格式化,可自定义类并继承IAuthorizationMiddlewareResultHandler 例:自定义类AuthorizationResultHandler
csharp
public class AuthorizationResultHandler : IAuthorizationMiddlewareResultHandler
{
public async Task HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
{
//await context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(new { msg = "用户未授权" }));
await next(context);
}
}
完成注册
csharp
services.AddSingleton<IAuthorizationMiddlewareResultHandler, AuthorizationResultHandler>();
asp.net core mvc项目
csharp
services.AddMvc()
.AddJsonOptions(options => {
//数据格式首字母小写
options.JsonSerializerOptions.PropertyNamingPolicy =JsonNamingPolicy.CamelCase;
//数据格式原样输出
//options.JsonSerializerOptions.PropertyNamingPolicy = null;
//取消Unicode编码
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
//忽略空值
options.JsonSerializerOptions.IgnoreNullValues = true;
//允许额外符号
options.JsonSerializerOptions.AllowTrailingCommas = true;
//反序列化过程中属性名称是否使用不区分大小写的比较
options.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
//mvc返回日期格式
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});