Asp.net mvc API路由404(如果缺少可选参数)
我已在我的WebApiConfig中设置了此路由Asp.net mvc API路由404(如果缺少可选参数),asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,我已在我的WebApiConfig中设置了此路由 public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{actio
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)
和request/api/product/gettest/10000我得到了JSON
我不知道为什么会发生404。我有其他控制器(用于非api请求)正常处理请求。在使用了几年的webforms之后,我是MVC的新手,这让我很困惑。作为参考,这里是我的路线图
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 }
);
}
我的申请就要开始了
protected void Application_Start()
{
BundleConfig.RegisterBundles(BundleTable.Bundles);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
}
这是由于您的路线顺序
RouteConfig.RegisterRoutes(RouteTable.Routes);
以前打过电话吗
GlobalConfiguration.Configure(WebApiConfig.Register);
您的RegisterRoutes方法包含一个默认(非常通用)路由
此通用(默认)规则将与您的url模式相匹配
api/product/gettest
在您的WebAPI路由有机会匹配之前
如果不需要的话,您可以去掉这个超级通用路由(并使用更具体的路由),或者只需将调用移动到
GlobalConfiguration.Configure(WebApiConfig.Register);
在呼叫之前到达
RouteConfig.RegisterRoutes(RouteTable.Routes);
在您的Global.asax中
我用你提供的所有信息构建了一个示例,移动那个电话效果很好。
我希望这有帮助。没问题!很乐意帮忙。
RouteConfig.RegisterRoutes(RouteTable.Routes);