ASP.NET Web Pages (Razor) 疑難排解指南
本文說明使用 ASP.NET Web Pages (Razor) 和一些建議的解決方案時,您可能擁有的問題。
軟體版本
- ASP.NET Web Pages (Razor) 3
本教學課程也適用于 ASP.NET Web Pages 2 和 ASP.NET Web Pages 1.0。
本主題包含下列幾節:
如需一般問題,請參閱ASP.NET Web Pages (Razor) 常見問題。
執行頁面的問題
各種問題都可能導致 .cshtml 和 .vbhtml 頁面無法正常執行。 本節列出常見的錯誤訊息和可能的原因。
HTTP 錯誤 403 - 禁止:拒絕存取
您沒有許可權使用您提供的認證來檢視此目錄或頁面。
如果伺服器未執行正確的.NET Framework版本,就會發生此錯誤。 請確定執行伺服器的電腦 (在本機或遠端) 至少已安裝 .NET Framework 4。 也請確定應用程式本身已設定為執行正確的版本。
如果您在 WebMatrix 中工作時在本機看到此問題,請按一下 [ 網站 ] 工作區,然後在樹狀檢視中按一下 [ 設定]。 在 [選取.NET Framework版本] 清單中,選取[.NET 4 (整合式) ]。 如果已設定此版本,請嘗試以系統管理員身分執行 WebMatrix。
請確定網站的根目錄中至少有一個 .cshtml 檔案。
如果您在遠端伺服器上網頁伺服器時看到此錯誤,請連絡伺服器管理員。 請確定伺服器已安裝 .NET Framework 4 或更新版本。 此外,請確定應用程式正在設定為使用該版本的 the.NET Framework 的應用程式集區中執行。
如果您有伺服器控制權,請確定其執行的是正確的.NET Framework版本。 您也可以執行 命令來嘗試修復安裝 aspnet_regiis -iru
。 (例如,如果您在安裝 .NET Framework 之後安裝 IIS,IIS 將不會正確設定為執行 ASP.NET pages。) 如需詳細資訊,請參閱ASP.NET IIS 註冊工具 (Aspnet_regiis.exe) 。
HTTP 錯誤 403.14 - 禁止
網頁伺服器設定為不列出此目錄的內容。
如果您要求受保護 (的資源,例如 Web.config 檔案) ,或是位於受保護 (的資料夾,例如 App_Data 或 App_Code) ,就會發生此錯誤。
HTTP 錯誤 404.17 - 找不到
要求的內容似乎為腳本,且不會由靜態檔案處理常式提供。
如果伺服器未正確設定為使用 .NET Framework 4 或更新版本,因此無法辨識 區塊中的 @{ }
程式碼,就會發生此錯誤。 請參閱 HTTP 錯誤 403 - 禁止:拒絕存取的描述。
HTTP 錯誤 404.7 - 找不到
要求篩選模組已設定為拒絕副檔名
如果伺服器上已明確封鎖 .cshtml 或 .vbhtml 延伸模組,就會發生此錯誤。 此問題的徵兆是 URL 在不包含副檔名時運作,但包含 .cshtml 或 .vbhtml 的 URL 無法運作。 可能的解決方法是重新啟用網站 Web.config 檔案中的擴充功能。 下列範例示範如何啟用 .cshtml 擴充功能。
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<remove fileExtension=".cshtml" />
<add fileExtension=".cshtml" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
HTTP 錯誤 404.8 - 找不到
要求篩選模組設定為拒絕 URL 中包含 hiddenSegment 區段的路徑。
如果您要求受保護 (的資源,例如 Web.config 檔案) ,或是位於受保護 (的資料夾,例如 App_Data 或 App_Code) ,就會發生此錯誤。
在 '/' 應用程式) 中未提供這種類型的頁面 (伺服器錯誤
請參閱稍早的 HTTP 錯誤 404.17 描述。
Razor 程式碼的問題
名稱 'class' 不存在於目前內容中
通常,您看到此錯誤的原因是參考 class
協助程式,但未安裝協助程式。 例如,如果您嘗試使用協助程式,但如果您尚未從 NuGet 安裝套件,您會看到此錯誤。 使用 WebMatrix 中的資源庫來尋找並安裝協助程式。
如果已安裝協助程式,但頁面仍然無法辨識,請嘗試將 語句新增 using
至程式碼。 在 語句中 using
,參考包含協助程式的命名空間。 例如,ASP.NET Web 協助程式套件中的基本協助程式位於 命名空間中 System.Web.Helpers
。 在您想要使用協助程式的頁面頂端,新增這一行:
@using Microsoft.Web.Helpers;
安全性與成員資格的問題
如果您在 ASP.NET Web Pages (Razor) 中使用內建安全性 (成員資格) 系統,可能會遇到下列問題。
若要呼叫這個方法,「Membership.Provider」 屬性必須是 「ExtendedMembershipProvider」 的實例
此錯誤可能表示未設定類別 AspNetSqlMembershipProvider
。 (一個徵兆是網站在本機運作正常,但當您將它發佈至主機提供者的伺服器時,會擲回此錯誤。) 此問題的一個修正是將下列內容新增至網站的 Web.config 檔案,明確地啟用簡單的成員資格:
<configuration>
<!-- other setting -->
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
<!-- other settings -->
</configuration>
傳送Email的問題
傳送電子郵件的問題可能很難進行偵錯。 初始問題可能是您無法連線到 SMTP 伺服器。 如果連線成功,ASP.NET 將訊息交給 SMTP 伺服器。 不過,郵件本身可能會發生問題,導致 SMTP 伺服器無法傳送它。
如果您的應用程式未成功傳送電子郵件,請嘗試下列動作:
- SMTP 伺服器名稱通常是 或
smtp.provider.net
。smtp.provider.com
不過,如果您將月臺發佈至主機提供者,該時間點的 SMTP 伺服器名稱可能是localhost
。 這種情況是因為在您發佈網站且月臺在提供者的伺服器上執行之後,SMTP 伺服器可能是從應用程式的觀點來看的本機伺服器。 伺服器名稱中的這項變更可能表示您必須在發佈過程中變更 SMTP 伺服器名稱。 - 埠號碼通常是 25。 不過,某些提供者會要求您使用埠 587 或其他埠。 請洽詢 SMTP 伺服器的擁有者,其預期您要使用的埠號碼。
- 請確定您使用正確的認證。 如果您已將網站發佈至主機提供者,請使用提供者特別指出的認證用於電子郵件。 這些認證可能與您用來發佈的認證不同。
- 有時候您完全不需要認證。 如果您使用個人 ISP 傳送電子郵件,您的電子郵件提供者可能已經知道您的認證。 發佈之後,您可能需要使用與在本機電腦上測試時不同的認證。
- 如果您的電子郵件提供者使用加密,請將 設定
WebMail.EnableSsl
為true
。
如果傳送電子郵件時發生錯誤,您可能會看到標準 ASP.NET 錯誤訊息,如下所示:
您也可以使用 try-catch
區塊對傳送電子郵件的問題進行偵錯,如下列範例所示。 當您使用 try-catch
區塊時,ASP.NET 不會顯示其標準錯誤訊息。 相反地,您可以在 區塊的 部分中擷取錯誤 catch
。
var errorMessage = "";
try {
// Initialize WebMail helper
WebMail.SmtpServer = "your-SMTP-server-name";
WebMail.SmtpPort = 25; // Or the port you've been told to use
WebMail.EnableSsl = false;
WebMail.UserName = "your-login-name";
WebMail.Password = "your-password";
WebMail.From = "your-from-address";
WebMail.Send(to: test-To-address,
subject: "Test email message",
body: "This is a debug email message"
);
}
catch (Exception ex ) {
errorMessage = ex.Message;
}
// Other code or markup here ...
<!-- In markup, add the following -->
@if(!errorMessage.IsEmpty()){
<p>@errorMessage</p>
}
將 適當的值取代為 your-SMTP-server-name
等等。 您可能會看到一些錯誤訊息,如下所示:
傳送郵件失敗。
-或-
因為連線對象有一段時間並未正確回應,所以連線嘗試失敗;或是因為連線的主機無法回應,所以連線建立失敗
此錯誤通常表示應用程式無法連線到 SMTP 伺服器。 檢查伺服器名稱和埠號碼。
無法使用信箱。 伺服器回應為:5.1.0 < someuser@invaliddomain > 寄件者拒絕:不正確寄件者網域
此訊息可能表示
From
位址不正確或遺失。指定的字串不是電子郵件地址所需的格式。
此錯誤可能表示 或
From
屬性的值To
無法辨識為電子郵件地址。 (ASP.NET 無法檢查電子郵件地址是否有效,只有其格式正確,例如 name@domain.com .)
注意
在您將頁面發佈至即時網站之前,請先移除顯示錯誤 (@errorMessage
) 標記。 讓使用者看到您從伺服器取得的錯誤訊息不是好主意。
其他資源
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應