【发布时间】:2014-04-13 02:13:50
【问题描述】:
我在我的 WebApiConfig 中设置了此路由
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}
和/Api/ProductController.cs里面的这些方法
public object GetProduct(int id)
{
var productRepo = new ProductRepository(db);
var product = productRepo.GetItem(id);
return product.ToAnonymousType();
}
public object GetTest()
{
var productRepo = new ProductRepository(this.db);
var product = productRepo.GetItem(10000);
return product.ToAnonymousType();
}
我可以请求 /api/product/getproduct/10000 并取回 JSON。
如果我请求 /api/product/gettest 我得到一个 404
如果我将 gettest 更改为
public object GetTest(int id)
并请求 /api/product/gettest/10000 我得到 JSON。
我不知道为什么会发生 404。我有其他控制器(用于非 api 请求)正常处理请求。经过几年的网络表单,我是 MVC 的新手,这让我很难过。作为参考,这是我的 RouteConfig
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
还有我的 Application_Start
protected void Application_Start()
{
BundleConfig.RegisterBundles(BundleTable.Bundles);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
【问题讨论】: