2012-12-27 81 views
2

我在我的Web Forms項目中使用Web API。我在我的項目的Application_Start方法下面的代碼在Global.asax中:Web API在控制器的Web Forms項目中查找的位置?

GlobalConfiguration.Configuration.Routes.MapHttpRoute("ApiDefault", "api/{controller}/{id}", New With {.id = RouteParameter.Optional}) 

這基本上是複製和關於這一主題的微軟教程貼。

我也有一個名爲ValuesController的測試控制器。這個類就是默認的Web API控制器創建從添加新項嚮導控制器當一個人得到,並命名爲Controllers在我的Web窗體網站的文件夾中:

Imports System.Net 
Imports System.Web.Http 

Public Class ValuesController 
    Inherits ApiController 

    ' GET api/<controller> 
    Public Function GetValues() As IEnumerable(Of String) 
     Return New String() {"value1", "value2"} 
    End Function 

    ' GET api/<controller>/5 
    Public Function GetValue(ByVal id As Integer) As String 
     Return "value" 
    End Function 

    ' POST api/<controller> 
    Public Sub PostValue(<FromBody()> ByVal value As String) 

    End Sub 

    ' PUT api/<controller>/5 
    Public Sub PutValue(ByVal id As Integer, <FromBody()> ByVal value As String) 

    End Sub 

    ' DELETE api/<controller>/5 
    Public Sub DeleteValue(ByVal id As Integer) 

    End Sub 

End Class 

無論其 - 當我去http://localhost/api/Values - 而不是看到一些XML序列化的字符串value1value2的,我看到一個錯誤信息,像這樣:

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

所以 - 顯然,路由工作,因爲不是得到一個404,我得到一個消息,說的路線本身沒有按不解決任何事情。但路線應該解決一些問題 - 具體來說,我的ValuesController班甚至在名爲Controllers的文件夾中。

任何人都知道我在做什麼錯了?

在此先感謝。

+0

你的其他路線工作嗎? – CAbbott

+0

是的,其他路線似乎正在工作。 – benjy

回答

1

我想通了。這是因爲顯然MVC要求Controllers文件夾與聲明路由的文件處於同一級別 - 而不是(正如我以前所想的那樣)只是在根級別。

呃。