4

JohnPapaの新しいホットタオルテンプレートを試しています。本当に洗練されていますが、WebAPIで慣れているものと連携させるのに苦労しています。

ルーティングの問題を回避することはできましたが、それでもMicrosoft.AspNet.WebApi.HelpPageパッケージを機能させることができません。

これが私がしたことです:

  • ホットタオルVSIXをインストールします。
  • 新しいASP.NETMVC4プロジェクト-ホットタオルSPAテンプレート
  • ビルド、実行-動作します。
  • フォルダを右クリックし、。Controllersという名前のコントローラを追加しますTestController
  • 「空のAPIコントローラー」テンプレートを選択します。
  • TestControllerに次のアクションを記述します。

    public IEnumerable<string> GetTestData()
    {
         return new[] { "A", "B", "C" };
    }
    
  • ビルド、実行。

  • URLを試す/api/testエラー404を取得The resource cannot be found.
  • URLを試してください/api/test/gettestdata。動作します。

次に、デフォルトのAPIルートが変更され、{action}が必要であることに気付いたBreezeWebApiConfig.csので、デフォルトのAPIルートを次の場所に追加し直しました。

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
    );

今、私がURLを試してみると/api/test、それは機能します。

ここで、ヘルプパッケージを使用したいと思います。

  • Microsoft.AspNet.WebApi.HelpPagenugetパッケージを追加します。
  • AreaRegistration.RegisterAllAreas();に追加Global.asax.cs
  • ビルド、実行。

URL/Helpにアクセスしようとすると、次のエラーが発生します。

System.InvalidOperationException: The view 'Index' or its master was not found
or no view engine supports the searched locations.
The following locations were searched:
    ~/Views/Help/Index.aspx
    ~/Views/Help/Index.ascx
    ~/Views/Shared/Index.aspx
    ~/Views/Shared/Index.ascx
    ~/Views/Help/Index.cshtml
    ~/Views/Help/Index.vbhtml
    ~/Views/Shared/Index.cshtml
    ~/Views/Shared/Index.vbhtml

HotTowelテンプレートを壊さずにこのエラーを解決する正しい方法は何ですか?

これらのいずれかをバグと見なす必要がありますか?

4

3 に答える 3

9

HotTowelテンプレートをインストールし、アプリケーションを作成してからHelpPageをインストールした後、次のようなヘルプページ領域を登録しました。

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

しかし、上記のようにすると、ルーティング可能なルートは次の順序になり、あなたが述べたのと同様の問題に気づきました。

a.Breeze Api route
b.HotTowel route
c.Help page route
d.ignored routes
e.RouteConfig routes

そこで、次のようにして上記のルートの順序を修正しました。

  1. App_Startフォルダーの下の構成ファイルで「[assembly:WebActivator.PreApplicationStartMethod」呼び出しをコメントアウトします。

  2. Global.asax.csに次の順序でルートを登録します。これにより、ヘルプページが表示され、APIルートが呼び出され、それに応じてホームページも表示されるという問題が修正されたようです。

    protected void Application_Start()
    {
        //help page
        AreaRegistration.RegisterAllAreas();
    
        //api
        BreezeWebApiConfig.RegisterBreezePreStart();
    
        //hot towel
        HotTowelRouteConfig.RegisterHotTowelPreStart();
    
        //register bundles
        HotTowelConfig.PreStart();
    
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    }
    
于 2013-02-24T00:24:28.167 に答える
3

面白い。(HotTowelRouteConfig.cs内の)「HotTowelMvc」ルート定義全体を削除/コメントアウトしてから、RouteConfig.csの「Home」デフォルトコントローラー文字列を「HotTowel」に置き換えると、ヘルプパッケージを含むすべてが完全に機能します。

于 2013-02-23T22:07:32.950 に答える
0

独自のルートを追加しましたか?そよ風のルートは、追加したカスタムルートでは機能しません。

于 2013-02-23T19:03:03.537 に答える