2017-10-31 25 views
0

フロントエンドでエラーを区別する必要があるのは、検証からエラーコードを返信することです。ValidationResult asp .netでエラーコードを返す方法

現在エラーがちょうど

return new ValidationResult("Some error message")のようなものから、string errorMessageを返送します。

フロントエンドでチェックインするエラータイプの列挙型を使用して、エラーコードを何とか送り返すことはできますか?

理論例:

return new ValidationResult("Some default error message", MyErrorEnum.notEnoughCats)

答えて

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; } 
} 

エラーインターセプト:それは

/// <summary> 
    /// HTTP Code 
    /// </summary> 
    public int ErrorCode { get; set; } 
    /// <summary> 
    /// коде ошибки внутри сервиса 
    /// </summary> 
    public int? CodeAction { get; set; } 

単純なエラー

{ "errorCode": 400, "codeAction": 2, "errors": { 
"error": "bad values!" }} 
1

アヤックス+場合、私はこの方法を使用して、私のリターンクラスです

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 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),    
     }); 

あなたの検証結果は誰に電話しましたか? 部分ビューを返すこともできますか?

関連する問題