2

Пока я следую John Papa's excellent "SPA Jumpstart" course. Я дошел до того, что в учебнике, на котором протестирован контроллер громкоговорителей. На этом этапе мое приложение вернуло ошибку «404: Не найдено» вместо загрузки динамиков.Маршрутизация, не работающая для веб-api, добавлена ​​в пустое веб-приложение

Если у вас есть что-то неправильно с speakerController, я сделал простой щелчок правой кнопкой мыши -> добавить элемент -> добавить контроллер веб-api и создать «valuesController» с помощью стандартных методов запуска. Это не сработало, я просто получил:

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

В инструментах разработчика Chrome.

Впоследствии я попытался с нуля с помощью базового проекта пустого веб-приложения, затем пошел в 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 

После этого, базовая маршрутизация работала и я возможность успешно перейти на эту страницу по умолчанию контроллера.

Однако ... несмотря на удаление и переустановку пакета web api в моем проекте Jumpstart, я все еще не могу получить один и тот же URL-адрес, хотя все кажется мне идентичным в соответствующих файлах (global.asax и webApiConfig.vb).

Существует еще одна проблема с «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> 
+0

Вы подтвердили, что все пакеты в пакетах.Конфигурация папки моего модуля включена в ваш проект? –

+0

@JohnPapa Да, Джон, конечно. Список идентичен. Включено в оригинальный вопрос для подтверждения сейчас. – TheMook

+0

Хм. Это странно. Я вернулся к моему «тестовому» проекту vb, где я начал с веб-приложения и добавил бит, папку по папке и файл по файлу из моего проекта jumpstart. Теперь я нахожусь в положении, когда контроллеры все еще работают, и все файлы одинаковы, насколько я могу судить. Просто проверьте web.config, чтобы увидеть, заметно ли это. Я получаю ошибку на speakerController, но это ошибка на 500 серверов, относящаяся к типу «ObjectContent'1», не удалось сериализовать тело ответа для типа контента «application/xml; charset = utf-8». » и далее говорит о строке – TheMook

ответ

1

Тупые, как это, кажется, что там была какая-то коррупции в проекте. Когда я воссоздал его и добавил все мои файлы обратно из сломанного проекта, все это работало нормально.

+0

хорошо, рад это слышать. вы были в тупике –

+0

Вы должны отметить это, как сейчас ответили, так что другие могут найти решение –

+0

Будет делать, когда это позволяет. Говорит еще 21 час! – TheMook

0

Похоже, учебник только доступный для членов, но точка останова не является хитом заставляет меня задаться вопросом, если старый код на самом деле является бег - или Application_Start не является стрельба b/c, он уже запускается один раз. Вы остановили сайт на панели задач между тестами? Отладчик должен быть присоединен.

+0

Как бы я пошел «Вы остановили сайт в системном трее между тестами» joelt? – TheMook

+0

В системном лотке должен быть значок, похожий на страницу с зеленоватым кружком и синим кружком. Если вы наводите на него курсор, он говорит «ASP.NET Development Server». Щелкните правой кнопкой мыши и выберите «Стоп». Теоретически перестройка будет делать это, но это не всегда работает – joelt

1

Вы уверены, что вызываете WebApiConfig.Register в своем global.asax? Вы также можете попытаться изменить маршрут:

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

(Просто, чтобы увидеть, если этот путь правильный маршрут разрешен ...)

+0

Да, вы можете увидеть это в моем коде, опубликованном в исходном вопросе: WebApiConfig.Register (GlobalConfiguration.Configuration) Также попробовал ваш другой код, и он не сделал разница вообще. – TheMook