【问题标题】:How to return an error code with ValidationResult asp .net如何使用 ValidationResult asp .net 返回错误代码
【发布时间】:2018-04-12 09:36:02
【问题描述】:
我需要通过发回验证中的错误代码来区分前端的错误。
目前错误只会发回string errorMessage,来自类似
return new ValidationResult("Some error message").
我能以某种方式发回错误代码,使用错误类型的枚举让我在前端检查吗?
理论例子:
return new ValidationResult("Some default error message", MyErrorEnum.notEnoughCats)
【问题讨论】:
标签:
c#
asp.net
asp.net-mvc
error-handling
【解决方案1】:
这很容易。只有使用常量作为数字更好。你需要:
/// <summary>
///
/// </summary>
public class NotFoundException : Exception
{
/// <summary>
/// Сообщение об ошибке
/// </summary>
/// <param name="message"></param>
public NotFoundException(string message, int? codeAction=null) : base(message)
{
CodeAction = codeAction;
}
public int? CodeAction { get; set; }
}
当拦截错误时:
public class ErrorsFilterAttribute : ExceptionFilterAttribute, IAutofacExceptionFilter
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var errorMessage = new ErrorMessage(actionExecutedContext.Exception.Message, HttpStatusCode.InternalServerError);
if (actionExecutedContext.Exception is NotFoundException)
{
errorMessage.ErrorCode = (int)HttpStatusCode.NotFound;
isWarning = true;
errorMessage.CodeAction = ((NotFoundException) actionExecutedContext.Exception).CodeAction;
}
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse((HttpStatusCode)errorMessage.ErrorCode, errorMessage);
}
}
errorMessage 这是我的返回类
/// <summary>
/// HTTP Code
/// </summary>
public int ErrorCode { get; set; }
/// <summary>
/// коде ошибки внутри сервиса
/// </summary>
public int? CodeAction { get; set; }
简单的错误
{ "errorCode": 400, "codeAction": 2, "errors": {
"error": "bad values!" }}
【解决方案2】:
如果ajax + json我用这种方式
private string RenderRazorViewToString(string viewName, object model, Dictionary<string, object> oDicParametresViewData = null, string sHtmlFieldPrefix = "")
{
ViewData.Model = model;
if (oDicParametresViewData != null) foreach (var param in oDicParametresViewData) ViewData[param.Key] = param.Value;
if (sHtmlFieldPrefix != "") ViewData.TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = sHtmlFieldPrefix };
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
Response.StatusCode = 666;
return Json(new
{
Html = RenderRazorViewToString("view", model),
});
谁打电话给你的验证结果?
你也可以返回一个局部视图?