第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將格式正確的錯誤響應(yīng)為 JSON

如何將格式正確的錯誤響應(yīng)為 JSON

C#
一只斗牛犬 2022-01-09 14:50:03
目前我正在構(gòu)建我的第一個 Web API。要求是以 JSON 格式顯示發(fā)生的任何錯誤作為響應(yīng)這是我的 ResponseData 類public class ResponseData {    public List<AccountDTO> AccountList { set; get; }    public string ReturnMessage { set; get; }    public string error { get; set; }    public string code { get; set; }    public string message { get; set; }    public string innererror { get; set; }    public string type { get; set; }    public string stacktrace { get; set; }}這是我的控制器例如,如果我的代碼執(zhí)行該catch塊,我將收集異常的所有信息并以格式化的JSON.[HttpGet]    public ResponseData getAllAccounts(string BRN, string CompanyName)    {        ResponseData response = new ResponseData();        List<AccountDTO> accountlist = null;        IAccountInterface usecase = new AccountDAO();        try        {            if (BRN != null && CompanyName != null)            {                accountlist = usecase.getAccountbyBRNCompanyName().Where(p => p.BRN.ToLower().Equals(BRN.ToLower()) && p.CompanyName.ToLower().Contains(CompanyName.ToLower())).ToList();                response.ReturnMessage = "Data filter by BRN and CompanyName.";            }            else            {                response.ReturnMessage = "Data filter cannot be null.";            }            response.AccountList = accountlist;        }        catch (Exception e)        {            //response.ReturnMessage = JsonConvert.SerializeObject(errorFormat);        }        return response;    }運(yùn)行此 Web APi 后,如果執(zhí)行了 catch 塊,則響應(yīng)如下圖所示。到目前為止,它幾乎與我想要的相似。但是,無論錯誤與否,我的 WEB API 響應(yīng)都會采用這種格式。我知道這是因?yàn)槲曳祷?aresponse object所以我的所有對象屬性都會顯示出來。這是我想要實(shí)現(xiàn)的示例響應(yīng)。有關(guān)錯誤的詳細(xì)信息以 JSON 形式包含在響應(yīng)中。錯誤將采用這種格式。任何幫助和指導(dǎo)都非常感謝。{   "error":{    "code": "<This code is not related to..>",    "message": "<A message describing the error..>",    "innererror": {     "message": "<A message describing the error..>",     "type": "Microsoft.Crm.CrmHttpException",     "stacktrace": "<Details from the server about where the                   error occurred>"      }     }  }
查看完整描述

2 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊

所需的 JSON 錯誤響應(yīng)模型與使用的類不匹配。


當(dāng)前的對象模型承擔(dān)多種職責(zé)。


考慮重構(gòu)類模型以服務(wù)于單一職責(zé)


public class ResponseData {

    public List<AccountDTO> AccountList { set; get; }

    public string ReturnMessage { set; get; }

}

還可以重構(gòu) API 操作以根據(jù)操作流返回適當(dāng)?shù)捻憫?yīng)。


[HttpGet]

public IHttpActionResult getAllAccounts(string BRN, string CompanyName) {

    try {

        ResponseData response = new ResponseData();

        List<AccountDTO> accountlist = null;

        IAccountInterface usecase = new AccountDAO();

        if (BRN != null && CompanyName != null) {

            accountlist = usecase.getAccountbyBRNCompanyName().Where(p => p.BRN.ToLower().Equals(BRN.ToLower()) && p.CompanyName.ToLower().Contains(CompanyName.ToLower())).ToList();

            response.ReturnMessage = "Data filter by BRN and CompanyName.";

        } else {

            response.ReturnMessage = "Data filter cannot be null.";

        }

        response.AccountList = accountlist;

        return Ok(response);

    }

    catch (Exception e) {

        Console.WriteLine("Error: " + e.Message + ", Stack: " + e.StackTrace);

        var response = new {

            error = new {

                code = "sample code",

                message = e.Message,

                innererror = new {

                    message = e.Message,

                    type = e.GetType().Name,

                    stacktrace = e.StackTrace

                }

            }

        }

        var responseMessage = Request.CreateResponse(HttpStatusCode.InternalServerError, response);

        return ResponseMessage(responseMessage);

    }

}


查看完整回答
反對 回復(fù) 2022-01-09
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個贊

    Console.WriteLine("Error: " + e.Message + ", Stack: " + e.StackTrace);

        response.error.code = "sample code";

        response.error.message = e.Message;

        response.error.innererror = "{";

        response.error.message = e.Message;

        response.error.type = "ExceptionType + ...";

        response.error.stacktrace = e.StackTrace;

這應(yīng)該會給你你想要的結(jié)果。響應(yīng)對象也必須重構(gòu)。


查看完整回答
反對 回復(fù) 2022-01-09
  • 2 回答
  • 0 關(guān)注
  • 187 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號