【问题标题】:How can I route an External Class Library in my Web API, ASP NET 5如何在我的 Web API、ASP NET 5 中路由外部类库
【发布时间】:2016-06-08 03:58:49
【问题描述】:

我在 ASP NET 5 中创建了一个 WEB API,我可以引用一个外部类库 vNext。 我正在开发 Visual Studio 2015 社区。 在那个库中,我有这个控制器:

[Route("api/[controller]")]
public class NovosController : Controller
{
    // GET: api/values

    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "i am", "an external library" };
    }

要在我的 Web API 引用中添加这个库,我必须浏览 DLL(一个用于 dnxcore50,一个用于 dnx451)。

这是结果:

dnx451

dnxcore50

在我的 Web API 中,我可以从该控制器获取数据,但我 无法从 URL 访问它。 但如果库在同一个解决方案中,我可以从 URL 访问它。

例如:

如果是外部库:

本地主机:51000/api/novos

什么都不给我

但如果库在同一个解决方案中:

本地主机:51000/api/novos

返回“我是一个外部库”

我想通过 URL 访问外部库,但我找不到任何解决我的问题的方法,有没有人知道如何使这个东西工作?

【问题讨论】:

  • 你有这是我们可以查看的 GitHub 中的 repo 吗?

标签: c# asp.net asp.net-core asp.net-web-api-routing


【解决方案1】:

只要满足要求,您不需要任何特殊的东西就可以让IControllerTypeProvider 发现您的外部类库:

  • 必须是类
  • 不能抽象
  • 必须公开
  • 必须是顶级(非嵌套)
  • 不能是通用的
  • 必须从 Controller 基类派生或以 Controller 后缀结尾(对于 POCO)并位于引用 MVC 程序集的程序集

(Source)

在您的特定情况下,我认为您只需要删除 Route 注释,因为它看起来不正确。

using Microsoft.AspNet.Mvc;
using System.Collections.Generic;

namespace External.Controllers
{
    [Route("api/[controller]")]
    public class NovosController: Controller
    {
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "I am", "an external library" };
        }
    }
}

【讨论】:

  • 我已经删除了那条路线,但我仍然遇到同样的问题,没有其他解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多