9

MVC を使用して単純な WebDAV サーバーを作成しようとしていますが、最終的に要求されたファイルをユーザーに提供する必要がある段階に達しました。

"webdav/{*path}"そのパスがファイル名で終わるポイントまで、正常に機能するディレクトリ構造のトラバースを処理するルートを設定しました。この時点で、IIS はそれが静的ファイルであると判断し、ディスクからそのファイルを提供しようとしているようです。URL で指定された場所にないため、404 エラーが返されます。

URL を自由に変更することはできません。基本的には次の形式にする必要があります。そうしないと、Windows エクスプローラーがマップされたドライブとして機能しません。

GET /webdav/Test/Test2.txt

ディレクトリ構造には多くのレベルを含めることができるため、ルートを貪欲に一致するように設定しました。私も設定しましたroutes.RouteExistingFiles = true;

これは私の開発マシンで IIS Express 8.0 を使用しています。

これをテストするためだけに、空の MVC プロジェクトをセットアップするところまで行きました。これが RegisterRoutes メソッドです。

routes.RouteExistingFiles = true;

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

routes.MapRoute(
    name: "WebDAVGet",
    url: "webdav/{*path}",
    defaults: new { controller = "WebDAV", action = "Get", path = "" });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional }
);

go to/webdav/Test/Test2はコントローラーのブレークポイントにヒットしますが、going to/webdav/Test/Test2.txtは 404 を返します。

助言がありますか?

4

2 に答える 2

12

追加する必要がありました

<modules runAllManagedModulesForAllRequests="true">

ウェブ構成に。

ああ、私はこれに数日間苦労してきました。ここに投稿すると閉塞が解消されることはわかっていました。

于 2012-09-17T16:26:14.097 に答える
3

もう 1 つのオプションは、これを web.config の <system.webserver> ノードに追加することです。

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>

これが IIS 7.5 で動作することを保証できます。

記録のために、私はこの解決策をここで見つけました。

于 2013-12-24T21:00:02.737 に答える