Microsoft.AspNetCore.OData 8: controller is not found by convention(Microsoft.AspNetCore.OData 8:按照约定未找到控制器)
本文介绍了Microsoft.AspNetCore.OData 8:按照约定未找到控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如docs中所述,Microsoft.AspNetCore.OData 8使用约定将控制器绑定到实体集。它们还提供了演示此行为的sample。但是,我花了几个小时用一个简单的控制器设置了一个最小的OData API,但是该控制器既不在OData路由调试页面($odata)中显示,也不能通过浏览器访问。
这是型号:
namespace TestOData8
{
public class Dummy
{
public int Id { get; set; }
}
}
这是控制器:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace TestOData8.Controllers
{
public class DummiesController : ODataController
{
[HttpGet]
[EnableQuery]
public IActionResult Query(CancellationToken ct)
{
return Ok(Enumerable.Range(1, 10).Select(x => new Dummy() { Id = x }).AsQueryable());
}
}
}
此代码设置应用程序(这是.NET6的设置方式;我也尝试过.NET5,但没有成功):
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
using TestOData8;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers()
.AddOData(opt => opt.Count().Filter().Expand().Select().OrderBy().SetMaxTop(5)
.AddRouteComponents(GetEdmModel())
);
IEdmModel GetEdmModel()
{
var bldr = new ODataConventionModelBuilder();
bldr.EntitySet<Dummy>("Dummies");
return bldr.GetEdmModel();
}
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
//app.UseAuthorization();
app.UseODataRouteDebug();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run();
我已经断言
- EDM模型已注册(此$METADATA端点显示虚拟实体)
- 控制器的名称与实体集(Dummies->;DummiesController)匹配
- 路由适用于不支持OData的控制器
- 将
EnableAttributeRouting
选项设置为false不会更改行为
我遗漏/误解了什么?
推荐答案
修复非常简单:控制器中的方法名称必须为&q;GET&q;;更改操作名称后,控制器可以工作:
public class DummiesController : ODataController
{
[HttpGet]
[EnableQuery]
public IActionResult Get(CancellationToken ct)
{
return Ok(Enumerable.Range(1, 10).Select(x => new Dummy() { Id = x }).AsQueryable());
}
}
Thansk to@JamesLove获取另一个answer下的小评论。
这篇关于Microsoft.AspNetCore.OData 8:按照约定未找到控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Microsoft.AspNetCore.OData 8:按照约定未找到控制器
基础教程推荐
猜你喜欢
- MS Visual Studio .NET 的替代品 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- rabbitmq 的 REST API 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01