【问题标题】:Controller is not working when I put it in another project OData .Net Core当我将控制器放入另一个项目 OData .Net Core 时,控制器无法正常工作
【发布时间】:2020-07-08 06:34:39
【问题描述】:

我有两个项目:OData (ASP.Net Core API) 和 Console(.Net core)。我将 ASP.Net Core 项目添加到 Console 作为参考并从 Console 启动服务。我在控制台项目中创建了一个控制器类,但它不起作用。这是我的项目结构:

我正在 SimpleServer 中启动 OData 服务:

namespace SimpleServer
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = "https://localhost:44383";
            var actionBuilder = Configuration.GetBuilder();
            StartHost(url, actionBuilder);
        }

        internal static IHost StartHost(string url, Action<IApplicationBuilder> action)
        {
            var host = Host.CreateDefaultBuilder().ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                webBuilder.UseIISIntegration();
                webBuilder.UseStartup<Startup>();
                webBuilder.UseHttpSys(op => op.UrlPrefixes.Add(url));
                webBuilder.Configure(action);
            }).Build();
            host.Start();
            return host;
        }
    }
}

OData 服务正在运行。它显示实体集:

但是当我转到 https://localhost:44383/odata/Student 时它显示 404 错误 当我将 StudentController 类移动到 OData 项目时,它正在工作。我想将控制器类放在另一个应用程序(我的控制台应用程序)中,我该怎么做?这是控制器类:

public class StudentController : BaseController<Student>
{

}



public class BaseController<TEntity> : ODataController where TEntity : class
{
    [HttpGet]
    [EnableQuery()]
    public IActionResult Get(ODataQueryOptions<TEntity> queryOptions, CancellationToken cancellationToken)
    {
        var list = new List<Student>
        {
            CreateNewStudent("Cody Allen", 130),
            CreateNewStudent("Todd Ostermeier", 160),
            CreateNewStudent("Viral Pandya", 140)
        };
        return Ok(list);
    }

    private static Student CreateNewStudent(string name, int score)
    {
        return new Student
        {
            Id = Guid.NewGuid(),
            Name = name,
            Score = score
        };
    }
}

【问题讨论】:

  • 您是否在使用多个启动项目?
  • @Shivendra 我不明白你的意思。我将 oData 项目作为类库并从几个 vays 开始
  • 从项目图标来看,您的 OData 项目显然不是类库。这意味着 AspNetCore 应用程序主机。
  • 这样做的目的是什么?
  • @DIlshodK 我相信示例服务器是作为类库创建的,而 oData 项目是作为 Web 项目创建的。不过没关系,如果你想运行示例服务器项目,你应该右键单击它并将其设置为启动项目。

标签: c# asp.net-core .net-core controller odata


【解决方案1】:

下面的解决方案解决了这个问题: 我做了一个控制器项目作为类库并添加以下代码:

    var modelAssembly = Assembly.LoadFrom(@"C:\Users\Owner\source\repos\ODataCoreTest\ClassLibrary2\bin\Debug\netcoreapp3.1\ClassLibrary2.dll");
        services.AddControllers(mvcOptions =>
             mvcOptions.EnableEndpointRouting = false).PartManager.ApplicationParts.Add(new AssemblyPart(modelAssembly));

现在一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多