我们正在处理与404 Refresh scenarios类似的情况 我们处于html 5模式,因此我们需要重写才能修复网址。问题是,适用于已部署应用程序的解决方案在开发期间无法在Visual Studio中运行。
我们的已部署应用程序解决方案的工作原理是将以下内容放在web.config中:
<rewrite>
<rules>
<rule name="AngularJS Routes" 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" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/myAppName/" />
</rule>
</rules>
</rewrite>
然后对index.html进行以下更改:
<base href="/myAppName/">
除了我们在Angular中构建的链接之外,这几乎都很有效。例如
<a href="/partDetails/"></a>
部署的应用程序不会放置&#34; myAppName&#34;在网址中。这是为什么?
第二个问题是在我们的Visual Studio开发环境中<base href="/myAppName/">
打破了应用程序。这会导致应用程序在输出中生成无限的错误字符串,如下所示:
SourceMap http://localhost:40288/app.module.js.map read failed: Unexpected character encountered while parsing value: <. Path '', line 4, position 1..SourceMap http://localhost:40288/app.core.module.js.map read failed: Unexpected character encountered while parsing value: <. Path '', line 4, position 1..SourceMap http://localhost:40288/app.config.js.map read failed: Unexpected character encountered while parsing value: <. Path '', line 4, position 1..
Exception was thrown at line 1247, column 4 in eval code
0x800a139e - JavaScript runtime error: SyntaxError
Exception was thrown at line 1265, column 4 in eval code
0x800a139e - JavaScript runtime error: SyntaxError
在内存耗尽之前,这似乎是一个无限循环。但是,如果我从<base href="/myAppName/">
删除应用名称,它似乎工作正常,但随后在服务器上中断。
问题出在这里的任何想法?为什么解决方案只能在一方,开发或部署,以及我们如何解决?
答案 0 :(得分:1)
如果为<base>
指令创建绝对URL,它应该可以工作。
例如,asp:Literal
名为&#34; baseLink&#34;在<head>
部分:
Option Infer On
Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
Dim baseUrl = Request.Url.GetLeftPart(UriPartial.Authority) & VirtualPathUtility.ToAbsolute("~/") & "myAppName/"
baseLink.Text = $"<base href=""{baseUrl}"">"
End Sub
(我刚刚在最后添加& "myAppName/"
- 我不在计算机上,我可以确认是否应该使用....ToAbsolute("~/myAppName/")
。)