【问题标题】: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),            
              });
      

      谁打电话给你的验证结果? 你也可以返回一个局部视图?

      【讨论】:

        猜你喜欢
        • 2022-12-06
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2013-01-30
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        相关资源
        最近更新 更多