3

私は恐ろしいですCannot use a leading .. to exit above the top directory.

残念ながら、それは生成されています...どこか?....私の制御不能です。それがどこで生成されているかを見つけるのに役立つツールはありますか?または、ハイパーリンクの実際のテキストでさえありますか?多分どういうわけかインテリトレース?

はい、それのための百万のグーグル結果があります。何を修正する必要があるかはわかっていますが、問題が実際にどこで発生しているのかわかりません。

レンダリングイベントをオーバーライドしてから、ベースからコントロールツリーをたどって見つけたすべてのHtmlLinkオブジェクトでResolveClientURLを呼び出してみましたが、例外がスローされたり、問題が発生したりすることはありません。base.renderのページからResolveClientURLを呼び出してい/v5/plugins/dashboardて、ベースページがにあるためにのみ停止する可能性があり/v5/ますか?

これが私が手動でデバッグするために書いたビットです。このコードは例外をスローすると思います。

  protected override void Render(HtmlTextWriter writer)
  {
    foreach (Control c in base.Controls)
    {
      Trace.Write("New base control");
      var baseParent = c;// findBaseParent(c);
      Trace.Write(baseParent.GetType().ToString());
      renderChillunsRecursive(baseParent, 0);
    }
    base.Render(writer);
  }
  private int total;
  private void renderChillunsRecursive(Control c,int depth)
  {
    var chilluns = c.Controls;
    foreach (Control a in chilluns)
    {
      renderChillunsRecursive(a,depth +1);
      total++;
    }
    string otherString = String.Empty;
    if(c.GetType() == typeof(HtmlLink))
    {
      HtmlLink theLInk = ((HtmlLink) c);
          otherString = theLInk.Href;
      otherString += " - " + theLInk.ResolveClientUrl(theLInk.Href);
    }
    Trace.Write(String.Format("{0} - {1} - {2} - {3} - {4}",depth,total,c.GetType(),c.ToString(),otherString));
  }

スタックトレース

[HttpException (0x80004005): Cannot use a leading .. to exit above the top directory.]
   System.Web.Util.UrlPath.ReduceVirtualPath(String path) +8886247
   System.Web.Util.UrlPath.Reduce(String path) +52
   System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative) +214
   System.Web.UI.Control.ResolveClientUrl(String relativeUrl) +180
   System.Web.UI.HtmlControls.HtmlLink.RenderAttributes(HtmlTextWriter writer) +74
   System.Web.UI.HtmlControls.HtmlLink.Render(HtmlTextWriter writer) +42
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +8703574
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.HtmlControls.HtmlHead.RenderChildren(HtmlTextWriter writer) +17
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +32
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +8703574
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +8703574
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   FileBasePage.Render(HtmlTextWriter writer) +2331
   FileDetails.Render(HtmlTextWriter writer) in c:\inetpub\V5 - Development\Plugins\Dashboard\FileDetails.aspx.cs:690
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +8703574
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266
4

2 に答える 2

1

マスター ページとエラー ページから ../ を削除し、~/ を配置します。

于 2014-09-01T09:50:28.287 に答える
0

誰も私の実際の質問に答えていません -

生成されている場所を見つけるのに役立つツールはありますか? それとも、ハイパーリンクの実際のテキストでしょうか? たぶんインテリトレース?

しかし、どういうわけか IIS dll セキュリティが邪魔をしていることがわかりました。このコマンドc:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////C:\inetpub\V5 - Development\*" FullTrust -exclusive onで問題が解決しました。これは、dll を右クリックして [ブロック解除] を選択するのと似ています。(このテスト サーバーのリモート デプロイは、サイトを圧縮してサーバーにドロップボックス化することで構成されていたため、Windows は追加のセキュリティ機能をサイトに適用しました)。http://blogs.msdn.com/b/narahari/archive/2010/06/03/system-security-securityexception-request-for-the-permission-of-type-system-web-aspnethostingpermission-system-versionを参照してください。詳細については、-2-0-0-0-culture-neutral-publickeytoken-b77a5c561934e089-failed.aspxを参照してください。

IIS がサイトの bin フォルダー内の DLL を好まなかったため、gac から有用な DLL を見つけたのですが、その時点で ReduceVirtualPath が失敗したと考えられます。

于 2013-02-11T18:50:04.353 に答える