我在Home视图下有一个带有索引页面(静态html)的mvc应用程序。我可以查看该页面。 routeconfig是:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我正在添加一个WebAPI控制器,并尝试调用Get。
public class TopicsController : ApiController
{
public string Get()
{
return "Hello WebAPI";
}
}
Webapi中的路由配置是:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
添加了应用程序启动功能:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
当我尝试以下内容时:
我收到以下错误:
未找到:( 抱歉,您尝试查看的页面不存在。
答案 0 :(得分:1)
看一下visual studio中的默认项目,您会注意到添加路由的顺序非常重要,因为'api / topics'algo与mvc路由匹配,这就是为什么它告诉你它没有'存在,因为你没有'api'控制器。
将其更改为:
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
留下其余的就像你拥有它一样
编辑:
更新了答案,以反映问题中的WebAPI版本。
但是在最新版本的WebAPI中:
WebApiConfig.Register(GlobalConfiguration.Configuration);
应该是:
GlobalConfiguration.Configure(WebApiConfig.Register);
答案 1 :(得分:1)
尝试更改Global.asax
中的注册顺序AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);