2

Web フォーム プロジェクトで Web API を使用しています。Global.asaxのプロジェクトのApplication_Startメソッドに次のコードがあります。

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

これは基本的に、件名に関する Microsoft のチュートリアルからコピーして貼り付けたものです。

という名前のテスト コントローラーもありますValuesController。このクラスは、新しい項目の追加ウィザードからコントローラーを作成するときに取得する既定の Web API コントローラーにすぎず、次の名前の Web フォーム サイトのフォルダーにありますControllers

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

ただし、に行くと、XML が文字列をhttp://localhost/api/Valuesシリアル化するのではなく、次のようなエラー メッセージが表示されます。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です。

私が間違っていることを知っている人はいますか?

前もって感謝します。

4

1 に答える 1

1

私はそれを考え出した。これは、MVCでは、Controllersフォルダーがルートを宣言するファイルと同じレベルである必要があるためです。(以前考えていたように)単にルートレベルではありません。

うーん。

于 2012-12-27T23:13:42.300 に答える