我们正在努力将应用程序迁移到新的Angular版本。旧版本(Angular.JS)是.NET Framework 4.5.2 ASP.NET
MVC应用程序为它自己的应用程序/存储库提供服务,该应用程序会将每个调用路由到Home
包含Angular应用程序的Razor
View,然后将其启动,可能会将URL的后缀路由到实际的Angular页面。例如,它将路由www.website.com/profile
到profile
Angular中的路由,而不是尝试访问profile
服务器上调用的文件夹。集成我们的API和Angular.JS应用程序虽然不是很漂亮,但是可以正常工作。该服务器还在IIS中具有虚拟文件夹,用于其他子文件夹,这些子文件夹应被访问,例如字体,图像,配置等。
目前,我正在努力使Angular 7应用程序与Angular.JS应用程序一起运行。我们希望运行Angular
7应用程序以在当前应用程序的目录中运行,然后再将其移至其自己的Web应用程序,因为我们的新Angular应用程序只是一堆静态文件,不需要与服务器捆绑在一起不再。基本上,不需要任何ASP.NET
MVC配置。
当前的URL将是www.website.com
Angular.JS应用程序,并返回该应用程序。新的将是www.website.com/v2/
并将返回Angular
7应用程序。如果我们已经完成了profile
页面的v2版本,则导航到wwww.website.com/v2/profile
现在应该导航到profile
Angular
7应用程序的页面。
在IIS中,虚拟文件夹之一是一个名为的文件夹dist
,它指向Angular.JS应用程序文件的位置。v2
现在配置了一个名为的新文件,它指向Angular
7应用程序文件的位置。另一个名为assets
导致指向assets
Angular 7应用程序的文件夹。
现在,当我导航到时www.website.com/v2/
,Angular会启动并将我路由到www.website.com/v2/home
,这是本地路由。
问题
是,当我输入www.website.com/v2/home
自己的内容时,它会导致应用程序路由回www.website.com
。因此它再次启动了Angular.JS应用程序。没有错误或重定向发生。看起来它只是忽略了v2/
紧随其后的部分,即使Angular.JS做到这一点也没问题。
TL; DR 导航到www.website.com/v2
Angular
7,但导航到v2/{{Anything}}
导致应用程序退回到运行的Angular.JS应用程序www.website.com
,即使{{anything}}
是Angular
7中的内部链接,它 也会 导航到该{{anything}}
路线。
我使用以下命令构建Angular项目:
ng build --configuration=dev --deploy-url=/v2/ --base-href=/v2/
angular 7应用程序中的路由如下所示:
const routes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full',
},
{
path: '',
canActivate: [AuthGuard],
component: DefaultLayoutComponent,
children: [
{
path: 'home',
component: DashboardComponent,
canLoad: [NoAuthGuard],
},
{
path: 'contact',
loadChildren: './modules/contact/contact.module#ContactModule',
canLoad: [NoAuthGuard],
},
{
path: 'timesheets',
loadChildren: './modules/timesheet/timesheet.module#TimesheetModule',
canLoad: [NoAuthGuard],
},
{
path: 'users',
loadChildren: './modules/users/users.module#UsersModule',
canLoad: [NoAuthGuard, NgxPermissionsGuard],
data: {
permissions: {
only: 'seeUsersPage',
redirectTo: '/403',
},
},
},
{
path: 'profile',
loadChildren: './modules/profile/profile.module#ProfileModule',
canLoad: [NoAuthGuard],
},
],
},
{
path: 'login',
component: LoginComponent,
},
{
path: '403',
component: Page403Component,
},
{
path: '**',
redirectTo: '/home',
pathMatch: 'full',
},
];
谁能告诉我我该如何做,例如,www.website.com/v2/contact
在浏览器中输入v2联系人页面,同时还可以进行内部导航(因此,如果用户单击Angular
7内部的“导航至v2联系人页面”应用程序,它还会导航到v2联系人页面)
编辑:有关Angular.JS Routerconfig
和后端的信息web.config
被要求;我在下面提供了它们。
RouterConfig
:
$routeProvider
.when('/', {
templateUrl: 'scripts/home/home.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
})
.when('/gebruikers', {
templateUrl: 'scripts/users/users.html',
controller: 'UsersController',
controllerAs: 'usersCtrl'
})
.when('/profiel', {
templateUrl: 'scripts/profile/profile.html',
controller: 'ProfileController',
controllerAs: 'profileCtrl'
})
.when('/timesheets', {
templateUrl: 'scripts/timesheets/timesheets.html',
controller: 'TimesheetsController',
controllerAs: 'timesheetsCtrl',
reloadOnSearch: false
})
.when('/facturen', {
templateUrl: 'scripts/invoices/invoices.html',
controller: 'InvoicesController',
controllerAs: 'invoicesCtrl',
reloadOnSearch: false
})
.when('/opdrachten', {
templateUrl: 'scripts/vacancies/vacancies.html',
controller: 'VacanciesController',
controllerAs: 'vacanciesCtrl'
})
.when('/contact', {
templateUrl: 'scripts/contact/contact.html',
controller: 'ContactController',
controllerAs: 'contactCtrl'
})
.when('/help', {
templateUrl: 'scripts/help/help.html',
controller: 'HelpController',
controllerAs: 'helpCtrl'
})
.otherwise({
redirectTo: '/'
});
Web.Config IIS rewrite rules:
<rewrite>
<rules>
<clear />
<rule name="Redirect Angular endpoints to MVC Home" enabled="true">
<match url="^(profiel|timesheets|facturen|opdrachten|contact|help|gebruikers)" negate="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="Home" logRewrittenUrl="false" />
</rule>
<!-- Some other rules that are not important are here, they redirect HTTP to HTTPS -->
</rules>
</rewrite>
之所以总是将其路由回v1网址,是因为angular 7应用程序包含一个如下所示的web.config
文件:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Angular" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我认为这是IIS部署的默认设置,团队成员可能已添加了此设置。我从没想过要在前端项目中使用web.config。
基本上,此规则负责将用户重新路由到index.html。例如www.website.com/folder
,通常会将用户带到folder
在Web服务器上调用的文件夹,但这不是Angular运行的位置,并且可能会导致404。此规则将用户带回www.website.com
,然后进行角度布线folder
。
因为我正在我的子文件夹的应用程序,我改变了url="/"
,以url="/v2/"
它立刻工作!
记得用来构建项目ng build --configuration=dev --deploy-url=/v2/ --base- href=/v2/
!需要部署网址,因为在服务器的根文件夹中找不到脚本/ css /其他文件;在/ v2 /中可以找到它。路由器需要base-
href;它应该www.website.com/v2/
从而不是在开始路由应用程序www.website.com/
!
不需要其他iis重写规则,asp.net配置,特殊的角度路由。只需这些简单的步骤!
问题内容: 我想解析这样的简单路线: 在理论上对它们的数量没有限制。并从中获得一个数组会很好。 如何使用Express路由? 问题答案: 使用正则表达式。 运行它,然后
我的问题与另一个问题非常相似,但该线程中提供的解决方案对我没有帮助。 我使用本指南将我的Laravel应用部署到共享托管服务(顺便说一句,该指南与链接问题的答案之一非常相似) 下面是我的路线/web.php文件 问题是,我可以访问欢迎页面和登录页面。验证后,我转到主页,然后问题开始出现。我尝试之外的每一条路径(比如mydomain.net/law/search)都会让我以某种无限循环的方式再次访问
问题内容: 因为我想分离系统的前端和后端。我已经在控制器内部创建了2个文件夹作为前端和后端 下面是我的控制器文件夹的结构 我可以通过使用以下功能 但我想从网址中删除前端和后端段。 我检查了codeigniter中的路由功能,但据我所知,我需要分别指定每个路由。由于我大约有12个控制器,每个控制器都具有大约10 -15个功能,因此我可能必须指定该路由的每个功能。 有没有其他有效的方法可以实现使用路由
我正在尝试在共享主机(godaddy)上部署我的Laravel项目,到目前为止,我只取得了部分成功。 我采取了以下步骤: 创建子域,root- 现在我可以成功登录,这将我带到,但是我所有其他没有的路由都不工作。例如: abc.xyz.com/public-作品 abc.xyz.com/home-不工作 我注意到,如果我手动添加到他们工作的所有路由!。 我的htaccess: 那么,如何像abc那样
问题内容: 尽管我很确定这是昨天或前一天工作的,例如,在IE10中不再起作用。我已经测试了我的浏览器,但是它不再起作用了。还有谁有相同的问题吗?或者,它永远都行不通吗? 问题答案: IE不支持输入type =“ number”,但您可以使用jQueryUISpinner小部件。它非常易于使用,并且具有许多对开发人员友好的API。
问题内容: 我更改了使用.ajax方法而不是.load的实现,它在Firefox中可以正常工作,但在IE7或IE6中却不能: 为了达到目标,这已经使我丧命。 任何想法,我要去哪里错了? 问题答案: 我不小心弄清楚了问题所在。 此变量中引用的链接: 最后有一个哈希值,如下所示: 这会导致AJAX在IE的两个版本中掉落。 使用以下代码: 盖茨摆脱它,现在可以工作了:)