在 学习 John Papa 出色的“SPA Jumpstart”课程的同时,我在教程中谈到了测试扬声器控制器的要点。此时我的应用程序返回了“404:未找到”错误,而不是加载扬声器。
如果扬声器控制器有问题,我做了一个简单的右键单击 -> 添加项目 -> 添加 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”,仍然没有。然后我意识到我需要做更多工作,并添加了一个“App_Start”文件夹,在其中放置了一个名为 WebApiConfig.vb 的文件。这包含:
导入 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
完成此操作后,基本路由工作,我能够成功进入该控制器默认页面。
但是...尽管在我的 jumpstart 项目中卸载并重新安装了 web api 包,但我仍然无法访问相同的 URL,即使在相关文件(global.asax 和 webApiConfig.vb)中(对我而言)所有内容都相同)。
index.vbhtml 页面没有呈现“scripts/css”和其他 js 文件还有另一个问题,但我认为这与这个问题无关,因为我正试图直接转到“...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>