[英]Return Task<T> as plain Task breaks WebAPI
这实际上是这个问题上的另一个天使
考虑这段代码
public interface IQueryHandler<in TQuery, TResult> where TQuery : Query<TResult>
{
Task<TResult> Handle(TQuery query);
}
上面的接口被调用,就像Task<T>
将作为Task
公开
public Task Invoke(Query query)
{
var queryHandlerType = typeof(IQueryHandler<,>);
var queryType = query.GetType();
var queryResultType = queryType.BaseType.GetGenericArguments().First();
var handler = _container.GetInstance(queryHandlerType.MakeGenericType(queryType, queryResultType)) as dynamic;
return handler.Handle(query as dynamic);
}
WebApi控制器
public Task Get([FromUri] Contract contract)
{
return _invoker.Invoke(CreateDto<Query>(contract));
}
这将破坏WebAPI,并且由于某种原因响应会将我重定向到网站的基本URL
您得到的是重定向响应而不是204,这似乎很奇怪,但是无论哪种方式,您的操作方法都不会像预期的那样具有该方法签名的行为。 通过返回Task
,可以有效地告诉您要(异步)不返回任何内容的框架。
我知道你不知道T
的Task<T>
在运行时这里和方法来解决那就是等待结果,并将其转换为一个对象。 这应该工作:
public async Task<object> Get([FromUri] Contract contract)
{
var result = await _invoker.Invoke(CreateDto<Query>(contract));
return result as object;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.