簡體   English   中英

ASP.NET MVC Web應用程序找不到href鏈接

[英]ASP.NET MVC Web Application can't find href link

我的Azure Web應用程序中具有以下HTML:

Please complete and return the 
<a href="~/Views/MyView/TermsOfService.pdf">Terms of Service</a>

.csproj文件中確實包含此pdf:

當我單擊“啟動Google Chrome瀏覽器”以在Visual Studio中進行本地測試時,以及單擊“服務條款”時,出現以下錯誤:

在此處輸入圖片說明

但是文件在那里! 它在我的文件系統上。 無需編碼。 為什么會顯示此錯誤,為什么不能從Web應用程序下載PDF? 我需要再發布一步嗎? 請幫忙!

默認情況下,普通請求管道不應訪問Views文件夾的內容。 Views文件夾位於將由視圖引擎執行的視圖文件( .cshtml )中。 如果查看~/Views內的web.config文件,可以看到我們已經注冊了BlockViewHandler ,它阻止了直接文件訪問所有文件。

<handlers>
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" 
                                        type="System.Web.HttpNotFoundHandler" />
</handlers>

您應該考慮將pdf文件移動到應用程序根目錄中的“ Statics目錄並指向該目錄。

在此處輸入圖片說明

現在,指向該位置

<a href="~/Statics/TermsOfService.pdf">Terms of Service</a>

您可以為目錄指定自己的名稱。 有些人喜歡將其保留在Content目錄下。 因此,這更多是個人喜好。

在asp.net核心中,默認情況下, wwwroot目錄是靜態內容主目錄。 因此,您可以將靜態內容保留在其中(這是可覆蓋的)

您可以對views目錄中的web.config進行更改以允許直接瀏覽,但是更可靠的方法是不污染約定並將靜態資產移動到其自己的文件夾中。 如果絕對要啟用對視圖目錄的直接文件訪問,則可以更新path屬性值,以告訴mvc禁止僅訪問具有特定擴展名的文件。 這是您將僅阻止.cshtml文件的方法(因此pdf將起作用)

<handlers>
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" 
       type="System.Web.HttpNotFoundHandler" />
</handlers>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM