2

学习 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>
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

看起来该教程仅供会员访问,但未命中断点让我想知道旧代码是否真的在运行——或者 Application_Start 没有触发 b/c 它已经运行了一次。您是否在测试之间停止了系统托盘中的站点?应附加调试器。

于 2013-03-18T14:30:33.840 回答