当前位置: 首页 > 知识库问答 >
问题:

微软。AspNetCore.OData 8:控制器未按惯例找到

盛浩阔
2023-03-14

如文档中所述,Microsoft。AspNetCore.OData 8使用约定将控制器绑定到实体集。他们还提供了一个示例来演示这种行为。

然而,我花了几个小时用一个简单的控制器设置了一个最小的ODataAPI,但是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());
        }
    }
}

这段代码设置了应用程序(这是.NET 6的设置方式;我也尝试了.NET 5,但没有成功):

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模型(此$元数据endpoint显示虚拟实体)
  • 控制器的名称与实体集匹配(傻瓜-

我错过了什么/误解了什么?

共有1个答案

罗飞宇
2023-03-14

修复非常简单:控制器中方法的名称必须是“获取”;更改操作名称后,控制器工作:

public class DummiesController : ODataController
{
    [HttpGet]
    [EnableQuery]
    public IActionResult Get(CancellationToken ct)
    {
        return Ok(Enumerable.Range(1, 10).Select(x => new Dummy() { Id = x }).AsQueryable());
    }
}

唐斯克在另一个回答下给@JamesLove一个小评论。

 类似资料:
  • 我正在学习拉威尔,我正在尝试使用拉威尔护照。当我尝试创建一个新用户时,我发现错误404 not found。 注册控制器。php 应用程序/Http/控制器/认证 我的api控制器也有这个路径 应用程序/Http/控制器/Api api中的路由。php 注册控制器 失眠测试注册 我知道我没有传递任何注册值。 我测试过127.0.0.1:8000/create 我已经测试了127.0.0.1:800

  • 由于某种原因,即使目标控制器类已经存在于正确的路径中,也找不到它。 路线 我的控制器路径是App- 这是我的控制器: 我已经尝试了作曲家转储-自动加载。我使用laravel框架8.0,所以我也试图恢复和使用7.24。仍然没有找到目标类。

  • 我一直在犯这个错误 你们可以看到,我的项目里有那个文件。 我还尝试重新启动我的本地MAMP服务器并清除缓存 我也做了 请让我知道我还能做什么。 路线 route::get(“/”,function(){return redirect::to(“/baby/signin”);});route::get(“/baby/signin”,“BabyAccountController@signin”);

  • 问题内容: 已关闭 。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 我是嵌入式世界的新手。可能是我错了。但是我想要一个相关的解决方案。 我只想将Java环境嵌入到MCU中以便于开发应用程序。MCU供应商提供了用于LCD,传感器,spi,按钮,UART,DIO等的C库。我可以将Java嵌入到此库中吗?我的意思

  • 我是新来的Spring应用程序。我试图创建小Spring应用程序,但我得到404错误消息。似乎控制器(indexController)没有开始调用。我累了调试,但它不在那里。 文件位置: /WebContent/WEB-INF/pages/index.html /WebContent/WEB-INF/HelloWebServlet。xml /WebContent/WEB-INF/web.xml H

  • 我有一个controller类,如下所示: 我正在尝试添加一个方面,如下所示: 但是,没有调用aspect方法。我期望它在调用控制器的时执行。 我看到spring mvc没有用代理包装我的控制器bean。这就是为什么这方面没有效果的原因吗? 有没有人能解释一下我怎样才能让这个方面。 控制器类位于:com.xyz.webapp.controller中 Aspect类在com.xyz.webapp中

  • URL解析规则 内置路由支持无限层级的路由,即Controller可以无限嵌套目录,如: http://127.0.0.1:9501/api/auth/login 执行的方法为:AppControllerApiAuth::login() http://127.0.0.1:9501/a/b/c/d/f 如f为控制器名,执行的方法为:AppControllerABCDF::index() 如F为方法名

  • 上一节的示例程序,演示了播放器内核的基础使用,但是只能循环播放,不能控制的播放器叫什么播放器。因此,这一节我们使用之前写的 button 按键库驱动按键,并实现按键控制播放器的行为:上一曲、下一曲、暂停/播放,音量调节。 硬件连接 以正点原子探索者 STM32F4 开发板为例。开发板上有四个供用户使用的按键 KEY_UP/KEY0/1/2,通过原理图可以看出,KEY0/1/2 三个按键对应的 PI