8

IIS6でBeta1MVCアプリをセットアップしようとしましたが、正しく実行できません。他のブログ投稿で提案されているように、ワイルドカードマッピングを.net isapi DLLに追加しましたが、Webサイトのルートにアクセスすると次のエラーが発生します。

The incoming request does not match any route.
..
[HttpException (0x80004005): The incoming request does not match any route.]
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +147
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +36
   System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +4
   HCD.Intranet.Web.Default.Page_Load(Object sender, EventArgs e) +81
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

Webサイトのルートへのアクセスを適切に書き換えるMVCテンプレートアプリケーションで提供されるDefault.aspxページを使用しています。

public partial class Default : Page
{
    public void Page_Load(object sender, System.EventArgs e)
    {
        HttpContext.Current.RewritePath(Request.ApplicationPath);
        IHttpHandler httpHandler = new MvcHttpHandler();
        httpHandler.ProcessRequest(HttpContext.Current);
    }
}

/ Projectなどのアプリケーション内のルートにアクセスしようとすると、.netエラーページではなく、標準のIIS404エラーページが表示されます。

Web.confighttpHandlersセクションに次の行を追加してみました。

<add verb="*" path="*" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

これは私に別のエラーを与えました-.net404エラーページ。

Global.asaxに以下を追加しましたが、何もしませんでした。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Context.Request.FilePath.Equals("/"))
        Context.RewritePath("Default.aspx");
}

次のルート構成を使用しています(MvcContribプロジェクトによって提供されるRESTfulルーティングを使用します)。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
SimplyRestfulRouteHandler.BuildRoutes(routes);
routes.MapRoute(
"Default", 
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);

私が今持っている時間のすべてのオプションを使い果たしたので、どんな提案も喜んで受け取られるでしょう。

どうもありがとう。

4

3 に答える 3

18

IIS 6 および ASP.NET MVC Beta 1 で動作する拡張子のない URL を取得するために行ったことを次に示します。

  • デフォルトの ASP.NET MVC ベータ プロジェクトを作成してコンパイルします。
  • アプリケーション ディレクトリを指す新しい IIS Web サイトを作成します。
  • Web サイトの IIS プロパティで、[ホームディレクトリ] タブをクリックします。
  • 「設定...」ボタンをクリックします。[マッピング] タブで、[挿入...] をクリックします。
  • 「ワイルドカード アプリケーション マップ」ラベルの横に、テキスト ボックスに「c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll」と入力します。
  • [ファイルが存在することを確認する] というラベルの付いたボックスのチェックを外し、[OK] をクリックします。
  • /home に移動します

web.config をまったく変更する必要はありません。IIS へのすべての要求を ASP.NET Isapi dll にマップする必要があるだけです。そうしないと、ASP.NET はそれらの要求を取得できません。

于 2008-11-10T22:21:38.110 に答える
8

OK、うまくいきました。

問題は、展開に必要なファイルをパッケージ化するために msbuild 自動化を使用していて、global.asax が見つからなかったことです。

そのため、global.asax がサイトにデプロイされていない場合、どのルートも接続されないように見えます。これは、Web サイトのルートに正しくヒットすると、「着信要求がどのルートとも一致しません」というエラーが発生し、他の要求がコントローラー クラスにルーティングされなくなり、404 が発生することを意味します。

HTH。

于 2008-11-12T12:47:35.227 に答える
1

残念ながら、IIS 6では、要求を適切なハンドラーにマップするためにファイル拡張子が必要です。つまり、 / {controller} .mvc/{action}などのコントローラー名に.mvcサフィックスを使用する必要があります。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

SimplyRestfulRouteHandler.BuildRoutes(routes);

routes.MapRoute(
      "Default",
      "{controller}.mvc/{action}/{id}",
      new { controller = "Home", action = "Index", id = "" }
);

ただし、IIS 6サーバーの制御レベルに応じて、これを回避する方法があります。詳細については、次のページを参照してください

于 2008-11-09T13:46:35.763 に答える