Поэтому я пытаюсь настроить маршрутизацию для своего проекта, у меня есть несколько разных случаев, которые нужно обрабатывать, но я не могу заставить их работать по назначению.
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'"}
Я предполагаю, что вы забыли правильно настроить локальные перенаправления. Если вы вводите /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="/" />
Хотя принятый ответ также необходим, я обнаружил, что когда вы создаете проект web api 2, он также создает файл MVC RouteConfig.cs, который, похоже, портит маршрутизацию и не позволяет index.html быть страницей по умолчанию для запуска angularjs., Поскольку в RouteConfig.cs есть маршрут (предполагающий наличие страниц справки), приложение, работающее на IIS, пытается использовать этот маршрут вместо того, чтобы IIS просто предоставлял index.html в качестве страницы по умолчанию, когда путь не указан.
Вы можете удалить RouteConfig.cs, чтобы получить index.html из IIS. Вопрос, над которым я все еще работаю, заключается в том, как перенаправить страницы справки.
/
я получаю сообщение:{"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/'"}