我正在使用大眾捷運
以下代碼回傳 null 并且 Context.RespondAsync 不能回傳 null
當未找到城市時我想回傳 Null 并且在控制器中我檢查回應是否為 null 然后回傳 Not Found
控制器 :
var request = _mediator.CreateRequestClient<TGetQuery>();
GetCityQuery getQuery = _mapper.Map<GetCityQuery>(id);
var result = await request.GetResponse<CityViewModel>(getQuery, cancellationToken);
if (result.Message == null)
{
return NotFound();
}
return Ok(result.Message);
和消費者:
public async Task Consume(ConsumeContext<GetCityQuery> context)
{
var cancellationToken = context.CancellationToken;
var request = context.Message;
var entity = await _cityRepository.TableNoTracking
.ProjectTo<CityViewModel>(_mapper.ConfigurationProvider)
.SingleOrDefaultAsync(x => x.Id == request.Id, cancellationToken);
await context.RespondAsync(entity);
}
所以 Masstransit Throw System.ArgumentNullException: Value cannot be null。MassTransit.Context.BaseConsumeContext.RespondAsync[T](T message) 處的(引數“訊息”)
有沒有辦法克服這個問題?
uj5u.com熱心網友回復:
您不能null用作訊息。如果要對請求客戶端使用多種回應型別,可以分別指定型別:
var request = _mediator.CreateRequestClient<TGetQuery>();
GetCityQuery getQuery = _mapper.Map<GetCityQuery>(id);
var result = await request.GetResponse<CityViewModel, NotFound>(getQuery, cancellationToken);
if (result.Is(out Response<CityViewModel> response)
{
return Ok(response.Message);
}
return NotFound();
您需要定義訊息型別:
public class NotFound
{
}
然后,在您的消費者中:
public async Task Consume(ConsumeContext<GetCityQuery> context)
{
var request = context.Message;
var entity = await _cityRepository.TableNoTracking
.ProjectTo<CityViewModel>(_mapper.ConfigurationProvider)
.SingleOrDefaultAsync(x => x.Id == request.Id, context.CancellationToken);
if(entity == null)
await context.RespondAsync(new NotFound());
else
await context.RespondAsync(entity);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476232.html
