У меня есть этот метод веб-API и класс
public async Task<ActionResult<ItemsList<GetJailItemDto>>> GetJailCells([FromBody] JailCellSearchDto jailcellSearchParameters)
{
var request = new GetJailCellsQuery()
{
JailCellsSearchParameters = jailcellSearchParam
};
var response = await _mediator.Send(request).ConfigureAwait(false); //returns Mediatr response object
return CreateResponse(response);
}
private ObjectResult CreateResponse(MediatRResponse response)
{
if (response.IsValid)
{
var actionResult = new OkObjectResult(response.ResponseValue);
return actionResult;
}
else
{
var objectResult = new ObjectResult(response.ValidationMessages);
objectResult.StatusCode = 400;
return objectResult;
}
}
public class MediatRResponse
{
.
.
.
.
public MediatRResponse(object responseValue)
{
Values = responseValue;
Errors = new List<ErrorItems>();
}
public object Values { get; protected set; } //stores items from DB
public IList<ErrorItems> lErrorItems{ get; set; }
public bool IsValid
{
get
{
return !lErrorItems.Any();
}
}
}
public class ListItems<T>
{
public IEnumerable<T> Items { get; set; } //Stores Items
public int Rows { get; set; }
}
Это успешно выполняется, но мы заметили, что, когда мы заменили тип возврата API с
async Task<ActionResult<ItemsList<GetJailItemDto>>>
на
async Task<ActionResult<int>>
он все еще работает и возвращает элементы
Возможно ли обеспечить безопасность этого типа, учитывая, что mediatr определяет тип ответа во время выполнения?
Я отказался от этого решения, поэтому я попробовал другой appproach
Решение, о котором я подумал, состоит в том, чтобы использовать отражение, чтобы получить тип возврата метода выполнения, который является
Task<ActionResult<ItemsList<GetJailItemDto>>> or Task<ActionResult<int>
, и сравнить его с типом response.Values, который должен возвращать
ItemsList<GetJailItemDto>>
и сравнивать его с универсальным c типом возвращаемого значения метода.
Если тип возвращаемого значения метода равен
async Task<ActionResult<ItemsList<GetJailItemDto>>>
, тогда return 200 OK
, если метод возвращает тип
async Task<ActionResult<int>>
, затем возвращает неверный запрос
Это моя попытка кодировать это
var method = MethodBase.GetCurrentMethod();
var returnType = ((MethodInfo)method).ReturnType; //get return type of executing method
для некоторых причина, по которой он возвращает System.Void вместо этого, вероятно, потому что его asyn * 104 7 *.
есть ли способ получить
ItemsList<GetJailItemDto> type
от
Task<ActionResult<ItemsList<GetJailItemDto>>>
Лично я предпочитаю безопасное решение, но прибегая к отражению из отчаяния, нужна помощь.