C# Can';无法使用AsyncEntitySetController为单个OData实体获取$expand
我无法在单个实体上使用$expand,但它在集合上运行良好。我有以下异步OData Web API控制器:C# Can';无法使用AsyncEntitySetController为单个OData实体获取$expand,c#,asp.net-web-api,async-await,odata,C#,Asp.net Web Api,Async Await,Odata,我无法在单个实体上使用$expand,但它在集合上运行良好。我有以下异步OData Web API控制器: public class AuthorController : AsyncEntitySetController<Author, int> { private readonly IAuthorRepository _AuthorRepo = new AuthorRepository(); // GET odata/<controller>
public class AuthorController : AsyncEntitySetController<Author, int>
{
private readonly IAuthorRepository _AuthorRepo = new AuthorRepository();
// GET odata/<controller>
[Queryable]
public override async Task<IEnumerable<Author>> Get()
{
var authors = await _AuthorRepo.GetAll();
return authors.AsQueryable();
}
// GET odata/<controller>/5
[Queryable]
public async Task<Author> Get([FromODataUri]int key)
{
var author = await _AuthorRepo.GetById(key);
return author;
}
}
public类AuthorController:AsyncEntitySetController工作,通过?$expand=books扩展作者的书籍也是如此
但是,尝试使用上面的Get方法扩展单个实体,该方法通过?$expand=Books接受关键参数,会产生以下错误:
找到多个与请求匹配的操作:Get on type
AcmeApi.Controllers.AuthorsController获取类型
AcmeApi.Controllers.authorscontroller
在阅读的答案后,我尝试通过将我的第二个Get方法更新为返回SingleResult:
[Queryable]
public SingleResult<Account> Get([FromODataUri]int key)
{
return SingleResult.Create<Account>(m_AccountRepo.GetById(key));
}
[可查询]
公共单结果获取([FromODataUri]int-key)
{
返回SingleResult.Create(m_AccountRepo.GetById(key));
}
但这会导致以下编译错误:
参数1:无法从转换
“System.Threading.Tasks.Task”到
“System.Linq.IQueryable”
异步GetById存储库方法是:
public async Task<Author> GetById(int id)
{
return await Task.Run(() => _Authors.Where(a => a.Id == id).SingleOrDefault());
}
public异步任务GetById(int-id)
{
返回wait Task.Run(()=>_Authors.Where(a=>a.Id==Id.SingleOrDefault());
}
如果返回SingleResult是让$expand为单个实体工作的方法,那么从异步控制器执行此操作的正确方法是什么?重命名get([FromOdataUri]int key)
到GetAuthor([]int)
可以解决此问题。
请参阅此帖子: