共用方式為


ASP.NET Web Pages (Razor) 疑難排解指南

作者:Tom FitzMacken

本文說明使用 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_DataApp_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_DataApp_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.netsmtp.provider.com 不過,如果您將月臺發佈至主機提供者,該時間點的 SMTP 伺服器名稱可能是 localhost 。 這種情況是因為在您發佈網站且月臺在提供者的伺服器上執行之後,SMTP 伺服器可能是從應用程式的觀點來看的本機伺服器。 伺服器名稱中的這項變更可能表示您必須在發佈過程中變更 SMTP 伺服器名稱。
  • 埠號碼通常是 25。 不過,某些提供者會要求您使用埠 587 或其他埠。 請洽詢 SMTP 伺服器的擁有者,其預期您要使用的埠號碼。
  • 請確定您使用正確的認證。 如果您已將網站發佈至主機提供者,請使用提供者特別指出的認證用於電子郵件。 這些認證可能與您用來發佈的認證不同。
  • 有時候您完全不需要認證。 如果您使用個人 ISP 傳送電子郵件,您的電子郵件提供者可能已經知道您的認證。 發佈之後,您可能需要使用與在本機電腦上測試時不同的認證。
  • 如果您的電子郵件提供者使用加密,請將 設定 WebMail.EnableSsltrue

如果傳送電子郵件時發生錯誤,您可能會看到標準 ASP.NET 錯誤訊息,如下所示:

當電子郵件發生問題時,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) 標記。 讓使用者看到您從伺服器取得的錯誤訊息不是好主意。

其他資源

ASP.NET Web Pages (Razor) 常見問題集

ASP.NET 網站上的 WebMatrix 和 ASP.NET Web Pages論壇