仮想ディレクトリ内のASP.NET MVC
-
06-07-2019 - |
質問
Global.asax.csに次のものがあります
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
私のSearchControllerは次のようになります
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
およびIndex.aspxは、現時点ではViewData [" partnerID"]を単に示しています。
Windows XPのIISにTestという仮想ディレクトリをセットアップしています。
ブラウザで http:// localhost / Test / を指定すると、期待どおり1000が表示されます。ただし、 http:// localhost / Test / 1000 を試すと、ページが見つかりませんというエラーが表示されます。アイデアはありますか?
仮想ディレクトリでMVCを実行するための特別な考慮事項はありますか?
解決
IIS 5.1は、Testという名前のフォルダーの下にある1000という名前のフォルダーを検索するようにURLを解釈します。なぜそうなのですか?
これはIIS 6のみが原因で発生します が表示されたときにASP.NETを呼び出します “ファイル名拡張子”のURL aspnet_isapi.dll(これは 担当するC / C ++ ISAPIフィルター ASP.NETを呼び出します)。ルーティングは 呼び出された.NET IHttpModule UrlRoutingModule、それは取得しません ASP.NET自体が取得しない限り呼び出される 呼び出されたときのみ発生します aspnet_isapi.dllが呼び出されます。 .aspxが存在する場合にのみ発生します URL。したがって、.aspx、no UrlRoutingModule、したがって404。
最も簡単な解決策は次のとおりです。
.aspxを使用する必要がない場合 URL、ルーティングを通過するだけ 構成、.aspxを前に追加 各パターンのスラッシュ。にとって 例、使用 {controller} .aspx / {action} / {id}または myapp.aspx / {controller} / {action} / {id}。 .aspxを中に入れないでください 中括弧パラメータ名、または ‘デフォルト’値は、tではないためです。 本当にコントローラー名の一部- IISを満たすためのURLにのみ含まれています。
出典: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
他のヒント
Windows XPでこれを行う場合、IIS 5.1を使用しています。要求を処理するにはASP.Netを取得する必要があります。ルートに拡張機能({controller} .mvc / {action} / {id})を追加し、その拡張機能をASP.Netにマッピングするか、すべての要求をASP.Netにマッピングする必要があります。 http:// localhost / Test は、MVCプロジェクトで特別に処理されるDefault.aspxに移動するため機能します。
さらに、 http:// localhost / Test / Search / Index / 1000を指定する必要があります。 IDを指定する場合、コントローラーとアクションはオプションではありません。
アプリケーションで仮想ディレクトリを使用する場合、いくつかの考慮事項があります。
特に、アプリが同じサーバー上にある場合でも、ほとんどのブラウザーは、ある仮想ディレクトリから別の仮想ディレクトリに送信されたCookieを送信しません。
仮想パスを設定してみてください:mvcプロジェクト、プロパティ、Webタブを右クリックして、適切な場所を入力します。