2012-07-08 27 views
18

我有一個名爲SlashBaseService基地ApiController一個的WebAPI項目時:獲得「無類型發現,名爲‘SampleSlashBaseService’控制器匹配」試圖使用的WebAPI

[RouteArea("uBase")] 
public abstract class SlashBaseService : ApiController 
{ 
} 

產生的dll是在WebForms的使用項目,所以我也有下面的代碼WebActivator類來生成路線:

RouteTable.Routes.MapHttpAttributeRoutes(config => 
{ 
    // Get all services inheriting from SlashBaseService 
    foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     foreach (var type in assembly.GetTypes()) 
     { 
      if (type.IsSubclassOf(typeof(SlashBaseService))) 
      { 
       // Scan assembly 
       config.ScanAssembly(assembly); 

       // Skip the remaining types in this assembly 
       break; 
      } 
     } 
    } 
}); 

RouteTable.Routes.MapHttpRoute(
    name: "DefaultBase", 
    routeTemplate: "base/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional }); 

我也有一個TestService的在單獨的程序:

public class SampleSlashBaseService : SlashBaseService 
{ 
    [GET("TestOpenMethod")] 
    public string GetTestOpenMethod() 
    { 
     return "Hello anonymous!"; 
    } 

    [GET("Echo/{message}")] 
    public string GetEcho(string message) 
    { 
     return message; 
    } 
} 

所有非常簡單的東西。問題是,當我嘗試去這個生成的網址之一時,我收到以下消息:

未找到與名爲'SampleSlashBaseService'的控制器相匹配的類型。

來自/routes.axd的路由列表也是正確的。

回答

53

發現問題。

ApiControllers類名需要後綴「Controller」,而我的不是。 更改爲SampleSlashBaseController解決了這個問題。

注: 很可能與「服務」的後綴也像我一樣,但你必須要實現自定義IHttpControllerSelector喜歡這裏描述的:http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi-support-areas-in.html

+7

我做了一些相反的事情。我有控制器,它不應該是! 'defaults:new {controller =「APIController」}'應該是'defaults:new {controller =「API」}'您必須在'WebApiConfig.cs'中OMIT Controller'! – Skovy 2014-07-11 15:57:50

+0

這就是我在WebApiConfig.cs中留下Controller後綴的情況。您的評論幫助我:) – 2015-01-21 13:08:51

+1

我發現這件事之前拉我的頭髮。這是多麼愚蠢的錯誤。謝謝 – 2015-05-06 09:19:02

2

在我而言,有兩個控制器具有相同名稱,在不同的文件夾中。重命名他們立即解決了問題。

9

您還需要確保Controller類是公共

+1

他的課程已經公開...... – DavidG 2015-12-09 01:22:42

+1

這個問題已經回答了,但是我的評論是我所遇到的問題的答案。我有同樣的錯誤,但我失去了公共。我想在這裏留下這個以防別人幫助別人。 – Eranga 2015-12-09 02:11:42

+2

幫助了我,謝謝你的回答 – paiden 2015-12-11 07:57:42

6

在我的情況下,控制器被正確定義,但沒有標明公衆。

1

對於它的價值,我遇到了這個問題,我的問題是我手動添加的類沒有從ApiController繼承。班級定義需要是public class QueueController : ApiController而不是public class QueueController。多麼愚蠢的事情可以忽略。

相關問題