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 以降がインストールされていることを確認します。 また、そのバージョンの .NET Framework を使用するように構成されたアプリケーション プール内でアプリケーションが実行されていることを確認します。
サーバーを制御できる場合は、サーバーが正しいバージョンの .NET Framework を実行していることを確認します。 aspnet_regiis -iru
コマンドを実行してインストールを修復してみることもできます (たとえば、.NET Framework をインストールした後に IIS をインストールすると、IIS は ASP.NET ページを実行するように正しく構成されません)。詳細については、「ASP.NET IIS 登録ツール (Aspnet_regiis.exe)」を参照してください。
HTTP エラー 403.14 - 禁止
Web サーバーは、このディレクトリの内容を一覧表示しないように構成されています。
このエラーは、保護されているリソース (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 - 見つかりません
要求フィルター モジュールが、hiddenSegment セクションを含む URL のパスを拒否するように構成されています。
このエラーは、保護されているリソース (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 ページ (Razor) で組み込みのセキュリティ (メンバーシップ) システムを使用している場合、次の問題が発生する可能性があります。
このメソッドを呼び出すには、"Membership.Provider" プロパティに "ExtendedMembershipProvider" のインスタンスを指定する必要があります
このエラーは、AspNetSqlMembershipProvider
クラスが構成されていないことを示している可能性があります (症状としては、サイトはローカルでは正常に機能しますが、ホスティング プロバイダーのサーバーに公開すると、このエラーがスローされます)。この問題の解決策の 1 つは、サイトの 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 のような正しい形式であるかどうかだけが確認されます)。
Note
ページをライブ サイトに公開する前に、エラー (@errorMessage
) を表示するマークアップを削除します。 サーバーから取得したエラー メッセージをユーザーに表示することは推奨されません。
その他のリソース
ASP.NET Web ページ (Razor) のよくあるご質問
ASP.NET Web サイトの WebMatrix と ASP.NET Web ページ フォーラム