Поэтому я попытался выполнить рефакторинг кода, чтобы вернуть ответы в более чистом виде. Но я, кажется, не могу понять, почему, когда я пытаюсь поместить errorResponse в ResponseBody, он возвращает неподдерживаемое исключение. Может кто-нибудь объяснить?
public class ResponseBodyBase
{
public string LogId { get; set; }
public ErrorResponseBody Error { get; set; }
}
public class ResponseBody : ResponseBodyBase
{
public string ItemId { get; set; }
public string ListId { get; set; }
public string SiteId { get; set; }
public bool? ToDropOffLocation { get; set; }
}
public class ResponseDebugBody : ResponseBody
{
public object Variables { get; set; }
}
public static ResponseBody CreateResponse(HttpRequest req, string logId, DocumentVariables documentVariables, ErrorResponseBody errorResponse)
{
// Determine if debug information is requested
bool isDebugMode = req.Headers.TryGetValue("debug", out var debugHeader) && !string.IsNullOrEmpty(debugHeader);
var standardResponse = new ResponseBody
{
LogId = logId,
ItemId = documentVariables.ListItemId,
ListId = documentVariables.ListId,
SiteId = documentVariables.SiteId,
Error = // null works, but if I put anything related to errorResponse here it goes wrong
};
// If in debug mode, add additional debug information
if (isDebugMode)
{
return CreateDebugResponse(baseResponse, documentVariables);
}
return baseResponse;
}
private static ResponseDebugBody CreateDebugResponse(ResponseBody baseResponse, DocumentVariables documentVariables)
{
return new ResponseDebugBody
{
LogId = baseResponse.LogId,
ItemId = baseResponse.ItemId,
ListId = baseResponse.ListId,
SiteId = baseResponse.SiteId,
Variables = new
{
// excess variables
},
ToDropOffLocation = false
};
}
И я возвращаю ответ следующим образом:
ErrorResponseBody errorResponse = new ErrorResponseBody
{
Timestamp = DateUtils.CreateTimeStamp(),
Status = 422,
Code = "Can't process entity",
Message = e.Message,
LogId = logId,
InnerError = e
};
var response = ResponseBody.CreateResponse(req, logId, documentVariables, errorResponse); // this goes fine
return new OkObjectResult(response) // returning this throws exception
{
StatusCode = errorResponse.Status,
ContentTypes = { "application/json" }
};
Подробнее здесь: https://stackoverflow.com/questions/791 ... flection-m