1

現在IIS7でクラシックモードで実行されているASP.NETMVCアプリケーション(バージョン1)を維持しています。代わりに、統合パイプラインモードでアプリの実行を開始したいと思います。ただし、統合モードに切り替えることができないという奇妙な問題が発生しています。試行すると、アプリケーションはフォームデータの受信を停止します。(つまり、データはPOSTメソッドを介して送信されます。)

Global.aspxファイルに大量のログを追加することで、フォームデータが失われる場所を絞り込むことができました。これが起こっているようです。

  1. リクエストを受信すると、Application_BeginRequestイベントが発生します。この時点で、フォームデータが存在し、リクエストオブジェクトFormsまたはParamsプロパティを調べることで確認できます。Urlこの時点でのリクエストのプロパティには、「。mvc」拡張子がどこにもありません。(これについては以下で詳しく説明します。)

  2. 次に、Application_AuthenticateRequestイベントが発生します。この場合も、フォームデータが存在し、URLには「.mvc」拡張子がありません。

  3. この時点で、私が期待するのは、Application_PostAuthenticateRequestイベントが発生することです。しかし、実際に起こることは、それApplication_BeginRequestが再び呼び出されることです。今回は、フォームデータがなくなりました。、、、またはその他のForms場所にはParamsありません。さらに、URLが変更され、URLのコントローラー名の部分に「.mvc」拡張子が付加されるようになりました。たとえば、手順1と2のURLが「/ Education / Manage」の場合、手順3では「/Education.mvc/Manage」と表示されます。

  4. Application_AuthenticateRequestイベントが再度発生します。この場合も、フォームデータが欠落しており、URLには「.mvc」拡張子が埋め込まれています。

  5. 今回Application_PostAuthenticateRequestはが起動され、ページの残りのライフサイクルは正常に進行します。これ以降のすべてのイベントでは、フォームデータはなく、「。mvc」拡張子は引き続き存在します。

この問題は、統合パイプラインモードに切り替えた場合にのみ発生します。クラシックモードでは正常に動作します。私は何日もグーグルをしてきましたが、残念ながら、同様の問題への言及を見つけることができませんでした。私はまた、運がなくても問題を解決することを期待して、いくつかの異なる方法でWeb.configファイルを編集しようとしました。ここの誰かがこの問題に光を当てることができることを願っています。

関連するコードスニペットをいくつか示します。他に含める必要のあるコードがある場合は、お知らせください。

Web.configから:

<system.web>
    <authentication mode="Forms">
        <forms name=".appLive" timeout="60" enableCrossAppRedirects="true" path="/" />
    </authentication>
    [...]
</system.web>
[....]
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="ScriptModule" />
        <remove name="UrlRoutingModule" />
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

        <remove name="FormsAuthenticationModule" />    
        <remove name="UrlAuthorization" />    
        <remove name="DefaultAuthentication" />    
        <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />    
    </modules>
    <handlers>
        <remove name="AboMapperCustom-17403419" />
        <remove name="WebServiceHandlerFactory-Integrated" />
        <remove name="ScriptHandlerFactory" />
        <remove name="ScriptHandlerFactoryAppServices" />
        <remove name="ScriptResource" />
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add name="AboMapperCustom-17403419" path="*.mvc" verb="GET,POST,HEAD,DEBUG" modules="IsapiModule" scriptProcessor="C:\Windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,bitness32,runtimeVersionv2.0" responseBufferLimit="0" />
    </handlers>
</system.webServer>

Global.aspxから:

    public void Application_BeginRequest(Object source, EventArgs e)
    {
        HttpApplication application = source as HttpApplication;

        if (source != null)
        {
            if (application.Request.AppRelativeCurrentExecutionFilePath.Contains(".mvc"))
            {
                application.Context.RewritePath(application.Request.Url.PathAndQuery.Replace(".mvc", string.Empty));
            }
        }
    }
4

1 に答える 1

2

クラシックモードをサポートするために、たまたまURLリライターまたはワイルドカードマッピングを使用していますか?統合モードではこれは必要ないため、オフにする必要があります。

于 2011-08-25T02:51:24.960 に答える