Настройка маршрутизации для Angular в проекте ASP.NET Web API 2

0

Поэтому я пытаюсь настроить маршрутизацию для своего проекта, у меня есть несколько разных случаев, которые нужно обрабатывать, но я не могу заставить их работать по назначению.
case 1: / - Маршруты к индексу углового приложения
Случай 2:/{Угловой маршрут} - Маршруты маршрутизации по углам, но я предполагаю, что сначала его нужно перенаправить на угловую базовую страницу.
Случай 3: /api/data/GetAllValues - Маршруты к методу контроллера api данных и действие GetAllValues
Мой базовый файл для углового сохраняется в корне: /index.html но у меня оно есть, так что, когда вы перейдете на эту страницу, угловой приведет вас в /Index

Это маршрут, который у меня есть в WebApiConfig.Register который вызывается Global.asax

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
    name: "DefaultActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional });

config.Routes.MapHttpRoute("AngularRedirect", "{.*}", "~/index.html");

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

И Угловые маршруты

.config(function($routeProvider, $locationProvider) {
    $routeProvider.when('/Index',
        {
            templateUrl: 'Templates/Feed.html',
            controller: 'feedController'
        }
    );
    $routeProvider.when('/Lookup',
        {
            templateUrl: 'Templates/Lookup.html',
            controller: 'lookupController'
        }
    );

   $locationProvider.html5Mode(true);

   $routeProvider.otherwise({ redirectTo: '/Index' });

Я получаю несколько проблем с этой настройкой, ни один случай 1 или 2 не работают, оба приводят к сообщению от asp.net с указанием, что он не может соответствовать URL-адресу запроса
Изменение: это сообщение об ошибке, когда я пытаюсь перейти к/(случай 1)

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:49569/'.","MessageDetail":"No route providing a controller name was found to match request URI 'http://localhost:49569/'"}

Обновить:
Я изменил маршрут по умолчанию asp.net, чтобы поймать {. *}, И теперь, когда я вставляю / он правильно перенаправляет на угловой, но когда я делаю /Index я все еще получаю ошибку, как показано ниже
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:49569/Index'.","MessageDetail":"No route providing a controller name was found to match request URI 'http://localhost:49569/Index'"}

  • 0
    Является ли сообщение, которое вы получаете для файлов шаблона, случайно? Пожалуйста, предоставьте полные сообщения об ошибках.
  • 0
    @Brad Нет, это из asp.net, так как ни один из маршрутов не перехватывает маршруты, указанные, например, когда я получаю / я получаю сообщение: {"Message":"No HTTP resource was found that matches the request URI 'http://localhost:49569/'.","MessageDetail":"No route providing a controller name was found to match request URI 'http://localhost:49569/'"}
Теги:
asp.net-web-api

2 ответа

0
Лучший ответ

Я предполагаю, что вы забыли правильно настроить локальные перенаправления. Если вы вводите /Index в своем браузере, запрос не перенаправляется на ваш базовый URL, поэтому он попадает в WebAPI вместо Angular.

В вашем веб-приложении web.config я бы добавил следующую конфигурацию:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularJS" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
          </conditions>
          <action type="Rewrite" url="/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

Кроме того, вам нужно будет установить base в файле index.html в head разделе, как показано ниже:

<base href="/" />
  • 0
    Идеальный и простой ответ, работал как шарм.
0

Хотя принятый ответ также необходим, я обнаружил, что когда вы создаете проект web api 2, он также создает файл MVC RouteConfig.cs, который, похоже, портит маршрутизацию и не позволяет index.html быть страницей по умолчанию для запуска angularjs., Поскольку в RouteConfig.cs есть маршрут (предполагающий наличие страниц справки), приложение, работающее на IIS, пытается использовать этот маршрут вместо того, чтобы IIS просто предоставлял index.html в качестве страницы по умолчанию, когда путь не указан.

Вы можете удалить RouteConfig.cs, чтобы получить index.html из IIS. Вопрос, над которым я все еще работаю, заключается в том, как перенаправить страницы справки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню