API 2控制器无法在ASP.NET MVC 5中运行

Ult*_*gma 5 asp.net-mvc asp.net-web-api

我不知道为什么,但我的api路线不起作用?我所做的是单击添加控制器,选择Web API 2控制器,使用EF进行操作(以便它为我构建)选择模型和上下文,然后单击添加.

WebApiConfig

public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

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

ProductsController(ApiController)

public IQueryable<Product> GetProducts()
    {
        return db.Products;
    }
Run Code Online (Sandbox Code Playgroud)

这意味着通过转到/ api/products,它会显示json格式的产品......但事实并非如此.我得到的是404:您正在寻找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.我也尝试过断点,甚至没有受到打击.所以我有点困惑.

我确实有自定义Web Route配置,我认为这可能是问题所在,但是在评论它们时仍然会发生这种情况.脚手架遗失了什么?

谢谢你的帮助

Ult*_*gma 18

在创建一个新项目并创建一个API控制器后,弹出一个文本文件(我决定关闭thinkign,我知道的更好)但是一旦关闭它就不会再弹出.

解决方案

只需在Global.asax中添加2个using语句即可

using System.Web.Routing;
using System.Web.Http;
Run Code Online (Sandbox Code Playgroud)

和GlobalConfiguration.Configure(WebApiConfig.Register); 必须首先在Application_Start方法下的同一个文件中

protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register); // <--- this MUST be first 
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助其他人