Asp.net mvc 4 MVC 4.5 Web API路由不工作?
一号线有效 e、 g.Asp.net mvc 4 MVC 4.5 Web API路由不工作?,asp.net-mvc-4,controller,routing,asp.net-web-api,Asp.net Mvc 4,Controller,Routing,Asp.net Web Api,一号线有效 e、 g.api/sheels/SpaceTypes/1 第二条路线不行。我得到多个动作的错误 e、 gapi/货架/1 Q)为什么? 以下是我的路线: config.Routes.MapHttpRoute( "DefaultApiWithAction", "api/{controller}/{action}/{id}" ); config.Routes.MapHttpRoute( "DefaultApiWithId", "api/{controll
api/sheels/SpaceTypes/1
第二条路线不行。我得到多个动作的错误
e、 gapi/货架/1
Q)为什么?
以下是我的路线:
config.Routes.MapHttpRoute(
"DefaultApiWithAction",
"api/{controller}/{action}/{id}"
);
config.Routes.MapHttpRoute(
"DefaultApiWithId",
"api/{controller}/{id}",
null,
new { id = @"\d+" }
);
这是我的控制器:
public HttpResponseMessage Get(int id)
{
...
}
[ActionName("SpaceTypes")]
public HttpResponseMessage GetSpaceTypes(int id)
{
...
}
此路由不知道要绑定到哪个操作:
config.Routes.MapHttpRoute("DefaultApiWithId", "api/{controller}/{id}", null, new { id = @"\d+" });
您的两种方法都是有效的候选方法我不是100%清楚您的设置是什么,但在正常的REST中,每个资源都有一个控制器,似乎您有一个控制器和两个资源。
要使其在此设置中正常工作,您可以强制第二条路径执行以下get操作:
config.Routes.MapHttpRoute("DefaultApiWithId", "api/{controller}/{id}", null, new { id = @"\d+", action="Get" });
对于MVC 4.5来说,这是唯一有效的方法 目前有一个 为了使您的路线正常工作,请执行以下工作
api/Shelves/ //Get All Shelves
api/SpaceTypes/1 //Get Shelf of id 1
api/Shelves/1/SpaceTypes/ //Get all space types for shelf 1
您需要执行以下操作
将您的路线改为。(请注意默认操作…)
在控制器中,将基本方法更改为
[ActionName("DefaultAction")]
public string Get()
{
}
[ActionName("DefaultAction")]
public string Get(int id)
{
}
[ActionName("SpaceTypes")]
public string GetSpaceTypes(int id)
{
}
现在一切都应该按预期进行了
多亏了Kip Streithorst full,克里斯托夫几乎是对的。你应该选择第二条路线:
config.Routes.MapHttpRoute(
"DefaultApiWithId",
"api/{controller}/{id}",
new { action = "Get" },
new { id = @"\d+ }
);
我有一个类似的问题,发现我没有在我的WebApiConfig中调用MapHttpAttribute方法 希望有帮助, 大卫
确保在项目的Global.asx文件中添加了
WebApiConfig.Register(GlobalConfiguration.Configuration);
进入应用程序启动功能。谢谢,但这不起作用。我在一个控制器上没有两种资源类型。我有一个单一的资源类型,用另一种方法通过id获取关于该资源的子信息。谢谢,我希望有一天能见到你,并亲自向你表示感谢
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
WebApiConfig.Register(GlobalConfiguration.Configuration);