10

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 を実行するための特別な考慮事項はありますか?

4

4 に答える 4

4

IIS 5.1 は、Test という名前のフォルダーの下にある 1000 という名前のフォルダーを検索するように URL を解釈します。どうしてこんなことに?

これは、IIS 6 が aspnet_isapi.dll (ASP.NET の呼び出しを担当する C/C++ ISAPI フィルター) にマップされた URL に「ファイル名拡張子」がある場合にのみ ASP.NET を呼び出すために発生します。ルーティングは UrlRoutingModule と呼ばれる .NET IHttpModule であるため、ASP.NET 自体が呼び出されない限り呼び出されません。これは、aspnet_isapi.dll が呼び出された場合にのみ発生し、URL に .aspx がある場合にのみ発生します。したがって、.aspx も UrlRoutingModule もありません。したがって、404 です。

最も簡単な解決策は次のとおりです。

URL に .aspx が含まれていてもかまわない場合は、ルーティング構成を調べて、各パターンのスラッシュの前に .aspx を追加してください。たとえば、{controller}.aspx/{action}/{id} または myapp.aspx/{controller}/{action}/{id} を使用します。.aspx は、実際にはコントローラー名の一部ではなく、IIS を満たすために URL に含まれているだけなので、中かっこのパラメーター名や 'default' 値に含めないでください。

ソース: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

于 2008-10-26T10:26:09.937 に答える
2

これを 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 を指定する場合、コントローラーとアクション ピースはオプションではありません。

于 2008-10-11T12:40:23.707 に答える
1

アプリケーションで仮想ディレクトリを使用する場合、いくつかの考慮事項があります。

1 つ目は、アプリケーションが同じサーバー上にある場合でも、ほとんどのブラウザーが 1 つの仮想ディレクトリから別の仮想ディレクトリに送信された Cookie を送信しないことです。

于 2008-10-08T14:18:12.803 に答える
1

仮想パスを設定してみてください。mvc プロジェクト、プロパティ、Web タブを右クリックし、適切な場所を入力します。

于 2008-10-08T18:03:49.527 に答える