如何让WebAPI HelpPage包使用HotTowel模板?

时间:2013-02-23 17:59:22

标签: c# asp.net-mvc asp.net-web-api breeze hottowel

我正在尝试John Papa的新Hot Towel模板。它非常光滑,但我在使用它与我习惯的Web API合作时遇到了一些困难。

我能够解决路由问题,但仍然无法使Microsoft.AspNet.WebApi.HelpPage包工作。

这就是我所做的:

  • 安装Hot Towel VSIX
  • 新的ASP.NET MVC4项目 - 热毛巾SPA模板
  • 构建,运行 - 工作。
  • 右键单击Controllers文件夹,添加名为TestController的控制器。
  • 选择“空API控制器”模板。
  • 在TestController中编写以下操作:

    public IEnumerable<string> GetTestData()
    {
         return new[] { "A", "B", "C" };
    }
    
  • 构建,运行。

  • 尝试网址/api/test获取错误404 The resource cannot be found.
  • 尝试网址/api/test/gettestdata。作品。

然后我注意到BreezeWebApiConfig.cs已经更改了默认的api路由,并且{action}是必需的,所以我添加了默认的api路由:

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

现在,当我尝试使用网址/api/test时,它就可以了。

现在我想使用帮助包。

  • 添加Microsoft.AspNet.WebApi.HelpPage nuget包。
  • AreaRegistration.RegisterAllAreas();添加到Global.asax.cs
  • 构建,运行。

当我尝试访问网址/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模板的情况下解决此错误的正确方法是什么?

其中任何一个都应被视为错误吗?

3 个答案:

答案 0 :(得分: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);
    }
    

答案 1 :(得分:3)

有趣。如果删除\注释掉整个“HotTowelMvc”路由定义(在HotTowelRouteConfig.cs中),然后将RouteConfig.cs中的“Home”默认控制器字符串替换为“HotTowel”,一切都可以正常工作,包括帮助包。

答案 2 :(得分:0)

您是否添加了自己的路线?微风路线不适用于您添加的任何自定义路线。