3

コンテキスト: 現在のシステムには、ファイルのアップロード、編集などを処理するカスタム WebDav HttpHandler が配置されています。また、Web サイトは WebFrom ベースです。そして、新しい WebAPI はその上に構築されます。

Asp.Net が提供するサンプル プロジェクトを使用します。統合は、WebDav が破損することを除いて、すべての WebForms および WebAPI メソッドを除いて正常に機能します。

問題: global.asax で WebAPI を登録した後、HTTP PUT 要求は常に WebAPI ルーティングに送信され、WebDav の PUT 要求は一致せず、404 応答を取得します (例外?)。

この [article][1] によると、HTTPRouting は MVC Routing とは異なるようです。HttpConfiguration.Routes には ignore() ルートがありません。

達成目標: PUT リクエストを区別し、それに応じて WebAPI または WebDav ハンドラーに送信できるようになります。例: WebAPI ルート パターンに一致しない要求要求は、例外応答を取得する代わりに、パイプラインに沿ってハンドラーに渡されます。

WebDav put リクエストは次のようになります。これも仮想化されています。

PUT /dav/{USERID}/{AUTH_TOKEN}/{PRAMS}/{PATHINFO}2.png

--編集

ルーティング エンジンからの例外。私が探しているのは、コントローラーが見つからないときに要求をパススルーし、エラー応答をスローする代わりに、IIS パイプラインの他のハンドラー/モジュールに要求を処理させる方法です。

応答は WebAPI によって生成され、CustomWebDavHandler に渡されません。

[HttpException]: パス {my WebDav virtual path} のコントローラーが見つからないか、IController を実装していません。System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (RequestContext requestContext、Type controllerType) で System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext、String controllerName) で System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase httpContext、IController& コントローラー) 、IControllerFactory& factory)
で System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext、AsyncCallback コールバック、オブジェクト状態) で System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() で System.Web.HttpApplication .ExecuteStep(IExecutionStep ステップ、ブール値&

4

2 に答える 2

1

ルートhttp://msdn.microsoft.com/en-us/library/system.web.routing.route.constraints.aspxで HttpMethod Constraint を試すことができますか

于 2012-09-06T00:01:09.720 に答える