我们正在处理与这些404 Refresh scenarios类似的情况
我们处于html 5模式,因此我们需要重写以修复URL。问题是,在开发过程中,适用于已部署应用程序的解决方案在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>


部署的应用程序不会在URL中放置“ myAppName”。为什么是这样?

第二个问题是在我们的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/">中删除​​了应用程序名称,它似乎可以正常工作,但随后在服务器上中断了。

有什么想法可以解决这里的问题吗?为什么解决方案只能在一侧进行开发或部署,我们该如何解决?

最佳答案

如果为<base>指令创建一个绝对URL,则它应该可以工作。

例如,在asp:Literal部分中使用名为“ baseLink”的<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/")的计算机上。)

关于javascript - 服务器上的 Angular 链接断开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42375686/

10-11 06:06