3

Windows7で実行されているMVC4、VS2012プロジェクトでServiceStackを使用しています。アプリケーションのロード時にデフォルトの「/search」ルートを呼び出そうとしています。これを行うには、AppHost の Configure メソッドに次のコードを含めます。

Plugins.Add(new RazorFormat());

SetConfig(new EndpointHostConfig
        {
            ServiceStackHandlerFactoryPath = "api",
            DefaultRedirectPath = "/search"
        });

このルートを (/api/search 経由で) 直接呼び出すと、正しく機能します。ただし、プロジェクトを実行すると、単に HTTP エラー 403.14 - 禁止されたエラーが発生します。DefaultRedirectPath で指定された動的ルートではなく、Web サイトのルート (これらはすべて削除しました) から静的ソース ドキュメントを見つけようとしているようです。

また、ルートが試行されているかどうかを確認するために CatchAllHandlers メソッドを介して HttpHandler を追加しましたが、DefaultRedirect が単に発生していないようです。

どんな提案でも大歓迎です。私が読んだすべてから、これはうまくいくはずです。

4

1 に答える 1

2

/apiweb.configでもパスを正しく設定していると思います。

DefaultRedirectPathAPI のルート (「/api」など) を要求するときに使用される単純なリダイレクトです。DefaultRedirectPathこれは文字通り、yourをヘッダーとして302 を返しますLocation(ASP.NET アプリケーションがサーバーのルートにない場合は、アプリケーションのルート URL と組み合わせて)。つまり、これは「ルート」ではなく、単なる相対 URL です。そして、あなたの場合、/searchアプリケーションのルートではなく、にリダイレクトします/api/search

を使用すれば、うまくいくはずですDefaultRedirectPath = "/api/search"

ただし、ServiceStack が Web サイトのルートにないMetadataRedirectPath場合は、最初に、それが null または空の場合にのみDefaultRedirectPath. MetadataRedirectPathしたがって、これが必要な場合は、nullに設定する必要があります。

CatchAllHandlers を使用したテストに関しては、私が知る限り、CatchAllHandlers は実際DefaultRedirect使用されないようにします.CatchAllHandlers はハンドラーとして使用され、DefaultRedirectPathリダイレクトを行う DefaultRedirectHandlers は機能しません.

これにより、「/api」から「/api/search」へのリダイレクトが処理されます。

MVC はルート URL を制御します - web.config と AppHost.Config への "api" の追加はまさにそれを行います - ServiceStack を "/api" のみ制御し、残りは MVC に任せます。したがって、その設定で、「/」から「/api/search」へのリダイレクトが必要な場合は、MVC ホーム コントローラーで行う必要があります。

于 2013-07-17T06:13:49.693 に答える