ASP.NET Web ページ (Razor) トラブルシューティング ガイド

Tom FitzMacken

この記事では、ASP.NET Web ページ (Razor) と推奨される解決策を使用するときに発生する可能性がある問題について説明します。

ソフトウェア バージョン

  • ASP.NET Web ページ (Razor) 3

このチュートリアルは、ASP.NET Web ページ 2 および ASP.NET Web ページ 1.0 でも動作します。

このトピックは、次のセクションで構成されています。

一般的な質問については、「ASP.NET Web ページ (Razor) FAQ」を参照してください

ページの実行に関する問題

さまざまな問題により、 .cshtml ページと .vbhtml ページが 正しく実行されない可能性があります。 このセクションでは、一般的なエラー メッセージと原因の一覧を示します。

HTTP エラー 403 - 禁止: アクセスが拒否されました

指定した資格情報を使用してこのディレクトリまたはページを表示するアクセス許可がありません。

このエラーは、サーバーが正しいバージョンの.NET Frameworkを実行していない場合に発生する可能性があります。 サーバーを実行しているコンピューター (ローカルまたはリモート) に少なくとも.NET Framework 4 がインストールされていることを確認します。 また、アプリケーション自体が適切なバージョンを実行するように構成されていることを確認します。

WebMatrix での作業中にローカルでこの問題が発生した場合は、[ サイト ] ワークスペースをクリックし、ツリービューで [設定] をクリックします。 [.NET Frameworkバージョンの選択] ボックスの一覧で、[.NET 4 (統合)] を選択します。 このバージョンが既に設定されている場合は、管理者として WebMatrix を実行してみてください。

Web サイトのルートに少なくとも 1 つの .cshtml ファイルがあることを確認します。

Web サーバーがリモート サーバー上にあるときにこのエラーが表示される場合は、サーバー管理者に問い合わせてください。 サーバーに .NET Framework 4 以降がインストールされていることを確認します。 また、そのバージョンの the.NET Framework を使用するように構成されているアプリケーション プールでアプリケーションが実行されていることを確認します。

サーバーを制御できる場合は、正しいバージョンの.NET Frameworkが実行されていることを確認します。 コマンドを実行して、インストールの修復を aspnet_regiis -iru 試みる場合もあります。 (たとえば、.NET Frameworkをインストールした後に IIS をインストールした場合、ASP.NET ページを実行するように IIS が正しく構成されません)。詳細については、「ASP.NET IIS 登録ツール (Aspnet_regiis.exe)」を参照してください。

HTTP エラー 403.14 - 禁止

Web サーバーは、このディレクトリの内容を一覧表示しないように構成されています。

このエラーは、保護されているリソース ( 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 - 見つかりません

要求フィルター モジュールは、hiddenSegment セクションを含む URL 内のパスを拒否するように構成されています。

このエラーは、保護されているリソース ( 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 ページ (Razor) で組み込みのセキュリティ (メンバーシップ) システムを使用している場合は、次の問題が発生する可能性があります。

このメソッドを呼び出すには、"Membership.Provider" プロパティが "ExtendedMembershipProvider" のインスタンスである必要があります

このエラーは、クラスが構成されていないこと AspNetSqlMembershipProvider を示している可能性があります。 (現象として、サイトはローカルで正常に動作しますが、ホスティング プロバイダーのサーバーに発行するとこのエラーがスローされます)。この問題の解決策の 1 つは、サイトの 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 エラー メッセージが表示されることがあります。

電子メールに問題がある場合にエラー メッセージを 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)。

Note

ライブ サイトにページを発行する前に、エラー (@errorMessage) を表示するマークアップを削除します。 サーバーから取得したエラー メッセージをユーザーに表示させるのは良い考えではありません。

その他のリソース

ASP.NET Web ページ (Razor) のよくあるご質問

ASP.NET Web サイトの WebMatrix と ASP.NET Web ページ フォーラム