2016-08-02 54 views
1

在我的控制,我已經把一張支票:流利的驗證:如何自定義錯誤的請求消息格式?

if (!ModelState.IsValid) 
{ 
    return BadRequest(ModelState); 
} 

這使我的錯誤是特定的格式,例如:

{ 
    "Message": "The request is invalid.", 
    "ModelState": { 
    "stocks.SellerType": [ 
     "SellerType should be greater than 101" 
    ], 
    "stocks.SourceId": [ 
     "SourceId should be less than 300" 
    ] 
    } 
} 

如何自定義此錯誤消息的格式。我知道如何自定義錯誤消息,即「SourceId應該小於300」。但我不知道如何更改「消息」,刪除或重命名JSON字段「ModelState」?

+0

一個包裝將返回一個較小的ModelState會是行嗎?例如:您自己的帶消息的自定義對象(如果需要,還可以使用其他字段) – meorfi

+0

是的,我想要我自己的自定義對象。 – maverick

+0

你在哪裏得到這個錯誤,在'controller'上? –

回答

1

更新:改變默認的消息,並保留默認格式ModelState錯誤,你可以使用HttpError類:

if (!ModelState.IsValid) 
{ 
    return Content(HttpStatusCode.BadRequest, 
     new HttpError(ModelState, includeErrorDetail: true) 
     { 
      Message = "Custom mesage" 
     }); 
} 

,也可以定義自己的模型進行驗證結果,並與需要的狀態代碼返回它(重命名json字段「ModelState」)。例如:

class ValdationResult 
{ 
    public string Message { get; } 
    public HttpError Errors { get; } 

    public ValdationResult(string message, ModelStateDictionary modelState) 
    { 
     Message = message; 
     Errors = new HttpError(modelState, includeErrorDetail: true).ModelState; 
    } 
} 
... 

if (!ModelState.IsValid) 
{ 
    return Content(HttpStatusCode.BadRequest, 
     new ValdationResult("Custom mesage", ModelState)); 
} 
+0

嗨,試了一下,我用k__BackingField得到了難看的序列化? {「Message」:「請求無效」,「Errors」:{「netMonthly」:{「_ errors」:[{「 k__BackingField」:null,「 k__BackingField」:「error message」}] 「 k__BackingField」:null}}} –

+0

@LeszekRepie,你是對的。這只是如何返回狀態碼爲「BadRequest」的自定義響應。查看更新後的答案 - 將保留默認格式。 –