CSV ファイル検証用の単純な ASP.NET MVC アプリケーションを用意しました。ユーザーは、ファイルに関するいくつかの特性 (テキスト ボックスといくつかのチェックボックス) を入力し、アップロードするファイルを参照して [送信] をクリックします。アプリケーション全体は、ローカル マシンと内部 Web サーバーでは正常に動作しますが、外部ホスティング環境に配置すると動作しません。以下、詳細です。
元々、私のマシンのファイルの内容はサーバーにコピーされていました。これは、CSS と JS のバンドルが有効になっていないことを意味します。アプリケーション ページは問題なくレンダリングされ、送信も機能します。ただし、ファイルを送信すると、アプリケーション ルートが変更されます。
ビュー内の次のコードの場所でアプリケーションルートをチェックしています。
var applicationpath = '@Url.Content("~/")';
パスは、最初のレンダリング時に次のように正しく出力されます。
var applicationpath = '/folder1/folder2/folder3/appfolder/';
ファイルを送信すると、 に変わります。
var applicationpath = '/folder1/folder2/folder3/';
ホスティングプロバイダーに確認したところ、「appfolder」にアプリケーションがセットアップされており、「folder3」はIISの単なるディレクトリであり、アプリケーションとしてセットアップされていません。
MVC ビューのフォームは、次の方法で投稿するように設定されています。
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "wizard" }))
パスが変更されるため、ルートに自動的にマップされるはずの@Url.Action
、 、およびその他の Razor メソッドが明らかに台無しになります。@Html.ActionLink
奇妙なことは、CSS および JS ファイルが引き続きレンダリングされた出力にマップされることです。
そのすべての後、Visual Studio を介してアプリケーションをローカル ファイル フォルダーに発行し、結果をホスティング プロバイダーにコピーすることにしました。これにより、CSS ファイルと JS ファイルのバンドルが有効になりました。アプリケーションのルートに移動すると、CSS も JS もプルダウンされません。バンドルされている JS または CSS ファイルへのパスを取得してブラウザに表示しようとしましたが、404 エラーが発生します。レンダリングされた出力は次のようになります。
<link href="/folder1/folder2/folder3/appfolder/Content/css?v=J7SZFaeCsOxTbb847HlSpnWlcb1lMDolldSj5wq-hdc1" rel="stylesheet"/>
言うまでもなく、私は途方に暮れています。ホスティング プロバイダーに、インストール済みの IIS 機能と搭載されている IIS 機能を教えてくれるように依頼しました。下記参照。