【问题标题】:No type was found that matches the controller named找不到与名为的控制器匹配的类型
【发布时间】:2015-05-06 14:40:41
【问题描述】:

更新:我卸载了该项目并重新进行了一次,它成功了。

我正在尝试创建一个 WebApi,我的构建工作正常,当我尝试转到 URI 时收到错误消息“找不到与命名控制器匹配的类型”

这就是我的 webapiconfig 的样子,

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

下面是我的控制器,

public class ClientController : ApiController
{

    public List<Client> Get()
    {
        ICRepository repository = new CRepository(new CContext());

        return repository.GetAllClients().ToList();
    }

这就是我的 global.asax.cs 文件的样子,

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

我正在尝试浏览网址“http://localhost:50662/api/client

完整的错误如下,

此 XML 文件似乎没有任何关联的样式信息。文档树如下所示。 未找到与请求 URI“http://localhost:50662/api/Client”匹配的 HTTP 资源。未找到与名为“Client”的控制器匹配的类型。

我的问题与它被标记为重复的问题不同,问题只使用控制器,它是 MVC,我的是“ApiController”,我在创建它之前确实读过它。此外,标记的答案与我在这里的答案相似,我的问题仍然存在。

任何帮助将不胜感激。我真的迷路了。

【问题讨论】:

  • 嗨杰拉德 - 我的问题不是重复的。在我打开它之前,我确实看过那个帖子。你能再看看吗?
  • 将路由更改为 api/{controller}/{id}。您的路由模板不会告诉 WebAPI URL 的哪一部分应该包含控制器名称。
  • 您要么需要将{controller} 添加到routeTemplate 字符串,要么将controller="Client" 添加到默认匿名对象。
  • 是的。我正在这样做。我也在帖子中更新了它。

标签: asp.net asp.net-web-api


【解决方案1】:

我遇到了同样的错误:

Error><Message>No HTTP resource was found that matches the request URI 'http://localhost:53569/api/values'.</Message><MessageDetail>No type was found that matches the controller named 'values'.</MessageDetail></Error>

默认情况下,当我在 asp.net 网络表单应用程序中创建新控制器时,它是这样的:

ValuesController1 : ApiController

我只是简单地删除了“1”,然后让它:

ValuesController : ApiController

我不知道这是一个错误还是什么,但它对我有用。

【讨论】:

  • 将控制器从 ValuesController1 重命名为 ValuesController 也为我解决了这个问题。
【解决方案2】:

您正在调用 WebApiConfig 两次。

 WebApiConfig.Register(GlobalConfiguration.Configuration);
 GlobalConfiguration.Configure(WebApiConfig.Register);

删除其中一个。如果您使用的是 Web Api Version >= 2.0,则删除第一个,否则删除第二个。

编辑 1

我认为您的问题可能类似于Answer

您可能缺少一些参考库,可能与您的控制器或 API 没有直接关系,但 Web Api 查找控制器的方式是遍历应用程序引用的所有程序集并搜索与谓词匹配的类型。

【讨论】:

  • 我也这样做了。我会更新我的帖子。但是还是不行
  • ClientController.cs 文件在哪里?你能确保在属性设置为 Build Action 设置编译这个文件。
  • 我删除了它,但仍然是同样的错误。该文件位于 Controllers 文件夹中,并且 BuildAction 设置为编译
【解决方案3】:

虽然这不是您的问题的原因,但我的问题实际上是由通过 Visual Studios 上下文菜单而不是控制器添加类型类的新项引起的。

生成的文件结构如下:

class foo
{
}

我扩展了该类以从 ApiController 继承,但忘记将其标记为 public

这是正确的版本:

public class FooController : ApiController
{
    public string Get(string name="Bar")
    {
        return $"Hello {name}"};
    }
}

【讨论】:

    【解决方案4】:

    现在我面临一个非常相似的问题。我的错误信息是No type was found that matches the controller named 'odata'。对我来说似乎真的很奇怪,它似乎正在搜索一个名为 ODataController 的控制器或类似的东西。于是我开始寻找真正的问题。就我而言,事实上,我忘记了在控制器类中包含一个公共的无参数构造函数。我添加了它,错误立即消失了。

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 1970-01-01
      • 2013-12-21
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多