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

时间:2015-02-19 19:58:17

标签: asp.net-mvc asp.net-web-api

我不确定为什么,但我的api路线不起作用?我所做的是点击添加控制器,选择使用EF操作的Web API 2控制器(以便它为我构建)选择模型和上下文并单击添加。

WebApiConfig

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

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

ProductsController(ApiController)

public IQueryable<Product> GetProducts()
    {
        return db.Products;
    }

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:17)

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

解决方案

只需将2个using语句添加到Global.asax

using System.Web.Routing;
using System.Web.Http;

和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);
    }

希望这可以帮助其他人

答案 1 :(得分:1)

对Ultigma的回答有点补充。在你的global.asax.cs中:

GlobalConfiguration.Configure(WebApiConfig.Register);

应该在此之前:

RouteConfig.RegisterRoutes(RouteTable.Routes);

原因是默认Web Api路由“api / {controller} / {action} / {id}”比MVC默认路由“{controller} /更具体{action} / {id}“,应该先放置。如果没有,对 / api / products 的请求将被视为对 Api的 产品 方法的调用 控制器。