我正在尝试John Papa的新Hot Towel模板。它非常光滑,但我在使用它与我习惯的Web API合作时遇到了一些困难。
我能够解决路由问题,但仍然无法使Microsoft.AspNet.WebApi.HelpPage包工作。
这就是我所做的:
Controllers
文件夹,添加名为TestController
的控制器。在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模板的情况下解决此错误的正确方法是什么?
其中任何一个都应被视为错误吗?
答案 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
所以,我通过以下方式修正了上述路线顺序:
在App_Start文件夹下的配置文件中注释掉“[assembly:WebActivator.PreApplicationStartMethod”。
在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)
您是否添加了自己的路线?微风路线不适用于您添加的任何自定义路线。