在接口开发中,通常会涉及到表单提交,以及表单的验证。
在视图模型中我们设置了表单验证
当提交表单时,如果这些字段不通过则会抛回错误400
这些错误使得前端比较难判断请求出错原因。
我们可以通过Filter 知识点连接 https://www.cnblogs.com/snaildev/p/9154669.html
来处理MVC的ModelState 知识点连接 https://www.cnblogs.com/hohoa/p/5839993.html
下面我们开始自定义一个ModelState 处理
首先定义错误信息返回模型
/// <summary>
/// 验证错误信息视图模型
/// </summary>
public class ErrorViewModel {
/// <summary>
/// 错误字段
/// </summary>
public string ErrorName { get; set; }
/// <summary>
/// 错误内容ErrorMessage
/// </summary>
public string Error { get; set; }
}
接下来我们自定义一个错误处理
/// <summary>
/// 请求验证错误处理
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]
public class RequiredError : ResultFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext actionContext)
{
//base.OnResultExecuting(actionContext);
var modelState = actionContext.ModelState;
List<ErrorViewModel> Errors = new List<ErrorViewModel>();
if (!modelState.IsValid)
{
PagedList<ErrorViewModel> errorList = new PagedList<ErrorViewModel>();
BaseResult baseResult = new BaseResult();
foreach (var key in modelState.Keys)
{
var state = modelState[key];
if (state.Errors.Any())
{
ErrorViewModel errorView = new ErrorViewModel();
errorView.ErrorName = key.ToString();
errorView.Error = state.Errors.First().ErrorMessage;
Errors.Add(errorView);
}
}
errorList.Items = Errors;
baseResult = new BaseResult()
{
code = ResultCodeAddMsgKeys.CommonObjectFailCode,
msg = "请求验证失败",
data = errorList
};
actionContext.Result = new ContentResult
{
Content = JsonConvert.SerializeObject(baseResult),
ContentType = "application/json"
};
}
}
}
这样已经定义完了。接下来我们去使用,到控制器里添加自定义错误验证的注解
修改表单视图模型,增加以下错误验证提示方便前端阅读
好了,我们再请求试一下。
这样表单验证错误就会按照我们得需求格式返回了。不会直接返回400,而是根据业务返回错误码。
代码也许不够好,可以指出。仅供初学者参考,大神可以指导,请不要太过严厉批评~~~~~~~~~~~
网友评论