フォーム データを (リモート サーバーから) 処理し、フォーム データに基づいてユーザーに電子メールを送信するために使用される従来の .cfm (ColdFusion) ページがあります。現在、私は ColdFusion を使用しなくなり、代わりに「無料」の ASP.NET (3.5) でホスティングしています。それをどれだけコントロールできるかはわかりません。しかし、.cfm ページに送られるすべてのリクエスト (実際にはフォームの投稿) が必要な処理を実行できる aspx ページにリダイレクトされる global.asax ファイルを作成できるかどうかを考えていました。共有ホスティングプロバイダーの制限内でこれを行うにはどうすればよいですか? IIS で仮想ディレクトリを作成できることはわかっています。たとえば、www.xyz.com/processform.cfm は www.xyz.com/processform.aspx?
2 に答える
2 つの方法があります。
各 cfm ファイルを aspx ページにマップするには、urlMapping コレクションを system.web セクションに追加します。
<system.web>
<urlMappings>
<add url="~/mypage.cfm" mappedUrl="~/mypage.aspx"/>
</urlMappings>
</system.web>
.cfm ファイルの要求をグローバルに処理する場合は、begin 要求イベントの global.asax で実行できます。
protected void Application_BeginRequest(object sender, EventArgs e)
{
if(HttpContext.Current.Request.CurrentExecutionFilePathExtension == ".cfm")
{
// Do what ever you need to do
}
}
どちらの方法もホストに依存しないため、godaddy は問題になりません。
最初のオプションではフォーム データが維持されますが、2 番目のオプションでは、フォーム データをリダイレクトするページに渡すロジックを記述する必要があります。
私が間違っていなければ、よくわかりませんが、おそらく Server.Transfer はフォームデータを保持しています
Koby Mizrahy が私を助けてくれました。私の問題は、GoDaddy の IIS クラシック モードで、Web サイトのメイン アプリケーションとして Blog Engine .NET 2.0 を実行していたことです。そのため、.cfm 拡張子は ASP.NET エンジンによって処理されなかったため、Web.Config または Global.asax への変更は役に立ちませんでした。統合モードに変更する必要がありました。これが私が修正したことです:
Web.Config で、これを 'Handlers' ノードに追加して、.cfm へのフォーム ポストが確実に処理されるようにしました。そうしないと、405 エラーが発生しました。
<add name="ColdFusion" path="*.cfm" verb="*" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode" />
次に、global.asax で、これを Application_beginrequest ハンドラーに入れました。
if (Request.Url.ToString().Contains("TourEmail-act.cfm"))//
{
Server.Transfer("/360Flash/TourEmail-act.aspx");
}
}
問題が解決しました!ミズライさん、ありがとうございます!