Поэтому я попытался выполнить рефакторинг кода, чтобы вернуть ответы в более чистом виде. Но я, кажется, не могу понять, почему, когда я пытаюсь поместить 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
NotSupportedException: сериализация и десериализация экземпляров System.Reflection.MethodBase не поддерживаются. ⇐ C#
Место общения программистов C#
1729608854
Anonymous
Поэтому я попытался выполнить рефакторинг кода, чтобы вернуть ответы в более чистом виде. Но я, кажется, не могу понять, почему, когда я пытаюсь поместить 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" }
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79114635/notsupportedexception-serialization-and-deserialization-of-system-reflection-m[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия