4

我正在试用 John Papa 的新热毛巾模板。它真的很漂亮,但我在让它与我习惯的 Web API 配合使用时遇到了一些困难。

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

这是我所做的:

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

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

  • 尝试 URL/api/test获取错误 404The 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 }
    );

现在,当我尝试 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

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

于 2013-02-23T22:07:32.950 回答
0

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

于 2013-02-23T19:03:03.537 回答