在这个问题上,这实际上是一个不同的天使
考虑这段代码
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,并且由于某种原因,响应会将我重定向到网站的基本网址
答案 0 :(得分:0)
你得到一个重定向响应而不是一个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;
}