1
我有這樣的路由設置在我WebApiConfigAPI路由404如果可選參數錯過
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 /產品/ getproduct/10000並返回JSON。
如果我請求/ API /產品/ gettest我收到了404
如果我gettest改變
public object GetTest(int id)
和請求/ API /產品/ gettest/10000我得到JSON。
我不知道爲什麼404會發生。我有其他控制器(對於非API請求)正常處理請求。經過幾年的webforms,我是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);
}
是的,就這樣做了!真的很明顯。謝謝! – Craig
沒問題!樂意效勞。 –