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 Error 403 - Forbidden: Access is denied
您無權使用所提供的認證來檢視此目錄或頁面。
如果伺服器未執行正確版本的 .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 頁面)。如需詳細資訊,請參閱 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)。
HTTP 錯誤 403.14 - 禁止
網頁伺服器設定為不列出此目錄的內容。
如果您要求受保護的資源 (例如 Web.config 檔案) 或受保護資料夾中的資源 (例如 App_Data 或 App_Code),就會發生此錯誤。
HTTP Error 404.17 - Not Found
要求的內容似乎是指令碼,靜態檔案處理常式未提供。
如果伺服器未正確設定為使用 .NET Framework 4 或更新版本,因此無法辨識@{ }
區塊中的程式碼,就可能發生此錯誤。 請參閱之前 HTTP Error 403 - Forbidden: Access is denied 的描述。
HTTP Error 404.7 - Not Found
要求篩選模組已設定為拒絕檔案擴充
如果伺服器上明確封鎖了 .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 Error 404.8 - Not Found
要求篩選模組已設定為拒絕 URL 中包含 hiddenSegment 區段的路徑。
如果您要求受保護的資源 (例如 Web.config 檔案) 或受保護資料夾中的資源 (例如 App_Data 或 App_Code),就會發生此錯誤。
未提供這種類型的頁面 ('/' 應用程式中的伺服器錯誤)
請參閱之前 HTTP Error 404.17 的描述。
Razor 程式碼的問題
名稱 '類別' 不存在目前的內容中
通常,您看到此錯誤的原因是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>
傳送電子郵件的問題
傳送電子郵件的問題可能很難進行偵錯。 初始問題可能是您無法連線到 SMTP 伺服器。 如果連線成功,ASP.NET 會將訊息傳給 SMTP 伺服器。 不過,也有可能是訊息本身有問題,導致 SMTP 伺服器無法傳送它。
如果您的應用程式未成功傳送電子郵件,請嘗試下列動作:
- SMTP 伺服器名稱通常類似
smtp.provider.com
或smtp.provider.net
。 不過,如果您將網站發佈至主機提供者,則此時的 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
位址不正確或遺失。指定的字串不是電子郵件位址所需的格式。
此錯誤可能代表
To
的值或From
屬性無法被辨識為電子郵件位址。 (ASP.NET 無法檢查電子郵件位址是否有效,只有其格式正確,例如 name@domain.com。)
注意
將頁面發佈至即時網站之前,請先移除顯示錯誤的標記 (@errorMessage
)。 讓使用者看到您從伺服器取得的錯誤訊息不是個好主意。
其他資源
ASP.NET Web Pages (Razor) 常見問題集
ASP.NET 網站上的 WebMatrix 和 ASP.NET Web Pages 論壇