2014-11-06 88 views
1

我正在使用web api構建我的第一個應用程序,而且我偶然發現了一個無法找到信息的問題。找不到與控制器匹配的類型

使用控制器的樣品來測試其工作:

public class TestController : ApiController 
{ 
    // GET api/test 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 
} 

WebApiConfig.cs:

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 

每次我打電話使用http://localhost:59502/api/test 服務我得到

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

有人能指出我做錯了什麼嗎?

+0

如果您刪除'config.MapHttpAttributeRoutes()'它是否工作?我可能是錯的,但如果您使用該選項,我認爲您還需要使用路線上的屬性,例如'[Route(「api/test/{id}」)]' – James 2014-11-06 16:50:28

+0

剛剛嘗試 - 仍然沒有去。 :( – Savio 2014-11-06 16:52:12

+1

@Savio,爲什麼要''測試''路由到''Get'「? – 2014-11-06 16:53:45

回答

0

我現在已經解決了這個問題 - 通過創建新項目,並複製所有類。 現在一切正常。

「你試過關掉它嗎?」噢..

+0

不想在這裏意味深長,但我真的不認爲這是一個真正的答案。這個問題是什麼?我面臨同樣的問題,我正在尋求解決它。 – SoftwareSavant 2015-09-11 12:15:01

+0

只有當我有一個 - 我完全是我寫的。重新創建項目並移動所有類以解決此問題。 – Savio 2015-09-15 11:32:28

1

要確定要調用哪個動作,框架使用路由表。 Web API的Visual Studio項目模板創建默認路由:使用默認路由模板,Web API使用HTTP方法選擇操作。但是,你也可以創造一個動作的名稱包含在URI路徑:

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

這樣你就可以訪問你的網址........./API /測試

+0

增加了額外的路由,不去。我認爲這個問題與不能確定採取行動的不同之處在於,錯誤在於沒有找到一個控制器,因爲它還沒有選擇行動。 – Savio 2014-11-06 17:05:07

+0

如果你嘗試訪問http:// localhost:52192/api/test/Get /(如我所建議的那樣更改路由之後),它會起作用嗎?因爲對我來說它很完美 – lordpiti 2014-11-07 10:20:53

0

對我來說,問題是由於重命名項目組件。重命名和重建項目後,舊程序集仍然保留在輸出(bin)文件夾中,並且與新的文件夾有某種衝突。

相關問題