我不确定为什么,但我的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路线配置,我认为这可能是问题所在,但是在评论它们时仍然会发生这种情况。脚手架遗失了什么?
感谢您的帮助
答案 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的 产品 方法的调用 控制器。