gpt4 book ai didi

generics - 泛型类型的 WebApi2 ResponseType 属性

转载 作者:行者123 更新时间:2023-12-01 13:41:23 26 4
gpt4 key购买 nike

我有一个带有 CRUD 操作的通用 WebApi Controller ,如下所示:

public abstract class BaseController<TEntity> : ApiController where TEntity : class
{
protected abstract DbSet<TEntity> DatabaseSet { get; }

// GET: api/{entity}
[Route("")]
public IEnumerable<TEntity> GetAll()
{
return DatabaseSet;
}

// GET: api/{entity}/5
[Route("{id:int}")]
//[ResponseType(TEntity)] ToDo: is this possible? <---
public IHttpActionResult Get(int id)
{
TEntity entity = DatabaseSet.Find(id);
if (entity == null)
{
return NotFound();
}

return Ok(entity);
}

// ...
// and the rest
// ...
}

我的问题是关于注释掉的 [ResponseType(TEntity)]。这条线不起作用。也不是 typeof(TEntity)。错误是“属性参数不能使用类型参数”有没有办法让 ResponseType 为泛型类型已知?

谢谢!
碧 Jade

最佳答案

从此link , 通用属性在 C# 中是不可能的。

我对 ResponseType 属性中的 Generic 参数做了以下解决方法,这基本上是将属性添加到派生类方法中。

public abstract class BaseApiController<TModel, TEntity> : ApiController
where TModel : class, IModel
where TEntity : IApiEntity
{
protected readonly IUnitOfWork _uow;
protected readonly IRepository<TModel> _modelRepository;

public BaseApiController(IUnitOfWork uow)
{
if (uow == null)
throw new ArgumentNullException(nameof(uow));
_uow = uow;

_modelRepository = _uow.Repository<TModel>();
}

protected virtual IHttpActionResult Get(int id)
{
var model = _modelRepository.Get(m => m.Id == id);
if (model == null)
{
return NotFound();
}
var modelEntity = Mapper.Map<TEntity>(model);
return Ok(modelEntity);
}
}

public class PostsController : BaseApiController<Post, PostApiEntity>
{
public PostsController(IUnitOfWork uow) : base(uow)
{

}

[ResponseType(typeof(PostApiEntity))]
public IHttpActionResult GetPost(int id)
{
return Get(id);
}
}

关于generics - 泛型类型的 WebApi2 ResponseType 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com