2

John Papa の優れた「SPA Jumpstart 」コースをたどりながら、スピーカー コントローラーをテストするチュートリアルのポイントにたどり着きました。この時点で、アプリはスピーカーをロードする代わりに「404: Not found」エラーを返しました。

SpeakerController に何か問題があった場合は、単純な右クリック -> 項目の追加 -> Web API コントローラーの追加を行い、標準の起動メソッドだけで「valuesController」を作成しました。それもうまくいきませんでした。

Request URL:http://localhost:57219/api/values
Request Method:GET
Status Code:404 Not Found

Chrome の開発ツールで。

その後、基本的な空の Web アプリケーション プロジェクトを使用してゼロから再試行し、nuget に移動して Microsoft Wep Api パッケージをインストールしました。次に、「valuesController」を再度追加しましたが、まだ何もありません。その後、さらに多くのことを行う必要があることに気付き、WebApiConfig.vb というファイルを配置する "App_Start" フォルダーを追加しました。これには以下が含まれていました:

System.Web.Http をインポートします。

Public Class WebApiConfig
    Public Shared Sub Register(config As HttpConfiguration)
        config.Routes.MapHttpRoute( _
            name:="DefaultApi", _
            routeTemplate:="api/{controller}/{id}", _
            defaults:=New With {.id = RouteParameter.Optional} _
        )
    End Sub
End Class

そして、次を含む「global.asax」ファイルを追加しました。

Imports System.Web.SessionState
Imports System.Web.Http

Public Class Global_asax
    Inherits System.Web.HttpApplication

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        WebApiConfig.Register(GlobalConfiguration.Configuration)
    End Sub
End Class

これを行った後、基本的なルーティングが機能し、そのコントローラーのデフォルト ページに正常に移動できました。

ただし...ジャンプスタートプロジェクトでWeb APIパッケージをアンインストールして再インストールしても、関連ファイル(global.asaxおよびwebApiConfig.vb)ですべてが同一であるように(私には)見えても、同じURLにアクセスできません)。

"scripts/css" やその他の js ファイルが index.vbhtml ページでレンダリングされないという別の問題がありますが、"...api/speakers " または "...api/values" をテストするため、インデックス ページをバイパスします。

Web API パッケージ以外は何もいらないはずですよね? global.asax および webapiconfig.vb ページにブレークポイントを配置しましたが、ヒットすることはありません。ただし、デバッガーが接続されるまでに、それらは既に完了していると思います。私は今どこを見るべきか完全に迷っています。ルーティングを妨害する可能性のある他のファイルは存在しないはずですよね?

私のpackages.configファイル:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Durandal" version="1.2.0" targetFramework="net45" />
  <package id="EntityFramework" version="5.0.0" targetFramework="net45" />
  <package id="EntityFramework.SqlServerCompact" version="4.3.6" targetFramework="net45" />
  <package id="FontAwesome" version="3.0.2.3" targetFramework="net45" />
  <package id="jQuery" version="1.9.1" targetFramework="net45" />
  <package id="knockoutjs" version="2.2.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="2.0.20715.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="4.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="4.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="4.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Modernizr" version="2.6.2" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
  <package id="SqlServerCompact" version="4.0.8854.1" targetFramework="net45" />
  <package id="toastr" version="1.2.2" targetFramework="net45" />
  <package id="Twitter.Bootstrap" version="2.3.1" targetFramework="net45" />
  <package id="WebGrease" version="1.1.0" targetFramework="net45" />
</packages>
4

3 に答える 3

1

global.asaxでWebApiConfig.Registerを呼び出していますか?ルートを次のように変更することもできます。

config.Routes.MapHttpRoute( _
name:="DefaultApi", _
routeTemplate:="api/{controller}" _
)

(この方法で正しいルートが解決されるかどうかを確認するだけです...)

于 2013-03-18T15:28:16.713 に答える
1

つまらないことですが、プロジェクトになんらかの不正があったようです。再作成して、壊れたプロジェクトからすべてのファイルを追加したところ、すべて正常に機能しました。

于 2013-03-18T23:40:18.793 に答える
0

チュートリアルはメンバーのみがアクセスできるように見えますが、ブレークポイントがヒットしていないため、古いコードが実際に実行されているかどうか疑問に思います. テストの間にシステム トレイでサイトを停止しましたか? デバッガーがアタッチされている必要があります。

于 2013-03-18T14:30:33.840 に答える