Приложение ASP MVC, над которым я работаю, использует проверку подлинности форм с тайм-аутом. Это означает, что когда сеанс истекло, и пользователь нажимает на обновление, они перенаправляются на страницу входа в систему, после чего они возвращаются на исходную страницу без глубокой ссылки на часть URL-адреса на стороне клиента.
Есть ли способ заставить ngRoute основывать свой глубоко связанный URL-адрес клиентской стороны на querystring? Например
http://somesite.com/?p=/home
Первое, что нужно сделать, это заставить сервер ASP MVC захватить любые URL-адреса, которые должны относиться к вашей угловой маршрутизации на стороне клиента и вернуть одностраничный HTML-код приложения. При регистрации маршрутов ASP MVC добавьте следующее правило
routes.MapRoute(
name: "Angular",
url: "x/{*clientPath}",
Если "x/" является базовой частью вашего клиентского приложения, вы можете обойтись без "x" в URL-адресе, если все ваше приложение является одностраничным угловым приложением, и в этом случае вам нужно будет добавить предыдущий чтобы отобразить страницу входа в систему на стороне сервера ASP MVC.
Затем в вашем приложении "Угловое" убедитесь, что вы используете режим Html5, например
app.config(["$locationProvider", "$routeProvider", function ($locationProvider, $routeProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
rewriteLinks: true
});
$routeProvider.when("/x/docs/upload", {
......
});
$routeProvider.when("/x/docs/view", {
......
});
$routeProvider.otherwise({
redirectTo: "/x/docs/upload"
});
}]);
Когда вы открываете браузер и переходите к http://mysite/x/what/ever/you/, как серверная сторона будет использовать XController.Index для рендеринга Views\x\Index.cshtml, который загрузит ваше одностраничное приложение и то ngRoute возьмет на себя и представит соответствующее представление для части "x/what/ever/you/like".
http://somesite.com/home
, если вы настроите $ location в режиме HTML5. Почему ты не используешь это? docs.angularjs.org/guide/$location