diff --git a/OpenAuth.WebApi/Model/CustomBadRequest.cs b/OpenAuth.WebApi/Model/CustomBadRequest.cs
new file mode 100644
index 00000000..a0ede947
--- /dev/null
+++ b/OpenAuth.WebApi/Model/CustomBadRequest.cs
@@ -0,0 +1,50 @@
+using System.Diagnostics;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.ModelBinding;
+
+namespace OpenAuth.WebApi.Model
+{
+ ///
+ /// 自定义模态验证异常返回信息
+ ///
+ public class CustomBadRequest : ValidationProblemDetails
+ {
+
+ public CustomBadRequest(ActionContext context)
+ {
+ Title = "WebAPI客户端传入的参数无效";
+ Detail = "vue客户端(或其他方式)调用WebAPI时传入的参数类型与接口需要的类型不匹配";
+ Status = 400;
+ ConstructErrorMessages(context);
+ }
+ private void ConstructErrorMessages(ActionContext context)
+ {
+ foreach (var keyModelStatePair in context.ModelState)
+ {
+ var key = keyModelStatePair.Key;
+ var errors = keyModelStatePair.Value.Errors;
+ if(errors.Count == 0) continue;
+
+ if (errors.Count == 1)
+ {
+ var errorMessage = GetErrorMessage(errors[0]);
+ Errors.Add(key, new[] { errorMessage });
+ }
+ else
+ {
+ var errorMessages = new string[errors.Count];
+ for (var i = 0; i < errors.Count; i++)
+ {
+ errorMessages[i] = GetErrorMessage(errors[i]);
+ }
+ Errors.Add(key, errorMessages);
+ }
+
+ }
+ }
+ string GetErrorMessage(ModelError error)
+ {
+ return string.IsNullOrEmpty(error.ErrorMessage) ?"The input was not valid.":error.ErrorMessage;
+ }
+ }
+}
diff --git a/OpenAuth.WebApi/Startup.cs b/OpenAuth.WebApi/Startup.cs
index 79a73ac5..b135c2be 100644
--- a/OpenAuth.WebApi/Startup.cs
+++ b/OpenAuth.WebApi/Startup.cs
@@ -41,9 +41,7 @@ namespace OpenAuth.WebApi
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
- services.Configure(options => { options.SuppressModelStateInvalidFilter = true; });
-
- //在startup中需要强制创建log4net
+ //在startup中需要强制创建log4net
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddLog4Net();
@@ -115,7 +113,15 @@ namespace OpenAuth.WebApi
.ConfigureApiBehaviorOptions(options =>
{
// 禁用自动模态验证
- options.SuppressModelStateInvalidFilter = true;
+ // options.SuppressModelStateInvalidFilter = true;
+
+ //启动WebAPI自动模态验证,处理返回值
+ options.InvalidModelStateResponseFactory = context =>
+ {
+ var problems = new CustomBadRequest(context);
+
+ return new BadRequestObjectResult(problems);
+ };
}).AddNewtonsoftJson(options =>
{
//忽略循环引用