如何解决动态类 ODataController
我有这个抽象控制器类来处理 odata 请求:
public abstract class ODataController<T>: ODataController where T : class
{
private readonly DbContext _service;
protected ODataController(DbContext service)
{
_service = service;
}
[EnableQuery(MaxExpansionDepth = int.MaxValue)]
public IActionResult Get()
{
return Ok(_service.Set<T>());
}
...
}
我可以为一种类型创建一个子类,并且可以毫不犹豫地完美返回 odata。
public class SpeciesController : ODataController<Specie>
{
public SpeciesController(DbContext service) : base(service) { }
}
我想对端点列表动态地(在运行时)做同样的事情。我尝试将控制器添加到系统中,如本教程所述generic-and-dynamically-generated-controllers-in-asp-net-core-mvc:
public class GenericTypeControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
{
public void PopulateFeature(IEnumerable<ApplicationPart> parts,ControllerFeature feature)
{
feature.Controllers.Add(typeof(ODataController<>).MakeGenericType(typeof(Species)).GetTypeInfo());
}
}
public class GenericControllerRouteConvention : IControllerModelConvention
{
public void Apply(ControllerModel controller)
{
if (controller.ControllerType.IsGenericType)
{
controller.Selectors.Add(new SelectorModel
{
AttributeRouteModel = new AttributeRouteModel(new RouteAttribute("api/v1/species")),});
}
}
}
...
services
.AddMvc(o => o.Conventions.Add(
new GenericControllerRouteConvention()
))
.ConfigureApplicationPartManager(m =>
m.FeatureProviders.Add(new GenericTypeControllerFeatureProvider()
));
工作正常,但动态控制器被添加为简单的 ApiController 收到此错误,我相信这是因为未被识别为 ODataController:
AmbiguousMatchException: The request matched multiple endpoints. Matches:
ODataController<Species>.Get
ODataController<Species>.Put
...
我怎样才能在运行时创建一个运行良好的 ODataController?* 我正在很好地配置 OData,因为我的静态测试工作正常,我需要知道如何在运行时添加一个 ODataController >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。