文章内容

2017/10/1 17:10:41,作 者: 黄兵

ASP.NET MVC API 404错误

最近在写代码的时候,报错,采用ASP.NET MVC API,错误截图如下:

报404,应该是没找到这个地址,看一下WebApiConfig的写法:

public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 路由
            config.MapHttpAttributeRoutes();

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

看一下Global.asax文件内容:

protected void  Application_Start()
        {

            StackExchange.Profiling.EntityFramework6.MiniProfilerEF6.Initialize();

            //开启线程扫描队列将数据取出来写到Lucene.NET中。
            SearchIndexManager.GetInstance().StartThread();                          

             //移除所有视图引擎
            ViewEngines.Engines.Clear();
             //添加Razor视图引擎
             ViewEngines.Engines.Add(new RazorViewEngine());
             
            //应用程序启动时,自动加载配置log4Net  
             log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));            

            AreaRegistration.RegisterAllAreas();

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

解决方案:

在Global.asax文件注册WebApi,代码如下:

protected void  Application_Start()
        {

            StackExchange.Profiling.EntityFramework6.MiniProfilerEF6.Initialize();

            //开启线程扫描队列将数据取出来写到Lucene.NET中。
            SearchIndexManager.GetInstance().StartThread();                          

             //移除所有视图引擎
            ViewEngines.Engines.Clear();
             //添加Razor视图引擎
             ViewEngines.Engines.Add(new RazorViewEngine());
             
            //应用程序启动时,自动加载配置log4Net  
             log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));            

            AreaRegistration.RegisterAllAreas();
            // Register API routes
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);            
            BundleConfig.RegisterBundles(BundleTable.Bundles);                     
        }

注意红色的部分,直接注册一下就OK了。但是注册也是有顺序的,下面那种搞错了顺序,也是会出现问题的:

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);

正确的注册方式形如:

AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);

如果加了上面语句之后报如下错误:

请确保在所有其他初始化代码后面的应用程序启动代码中调用 HttpConfiguration.EnsureInitialized()

请参考这篇文章:该对象尚未初始化 请确保在所有其他初始化代码后面的应用程序启动代码中调用 HttpConfiguration.EnsureInitialized()

参考资料:stackoverflow - All ASP.NET Web API controllers return 404

黄兵的个人博客原创。

转载请注明出处:黄兵的个人博客 - ASP.NET MVC API 404错误

分享到:

发表评论

评论列表