asp.net-mvc Asp.net Mvc 4 和 Web Api 中的路由
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12775887/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Routing in Asp.net Mvc 4 and Web Api
提问by Yasser Shaikh
Can I use the following two route rule together ?
我可以一起使用以下两个路由规则吗?
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Say by controller is = FruitApiController:ApiControllerand I wish to have the following
由控制器说是 =FruitApiController:ApiController并且我希望有以下内容
List<Fruit> Get()=api/FruitApi/List<Fruit> GetSeasonalFruits()=api/FruitApi/GetSeasonalFruitFruit GetFruits(string id)=api/FruitApi/15Fruit GetFruitsByName(string name)=api/FruitApi/GetFruitsByName/apple
List<Fruit> Get()=api/FruitApi/List<Fruit> GetSeasonalFruits()=api/FruitApi/GetSeasonalFruitFruit GetFruits(string id)=api/FruitApi/15Fruit GetFruitsByName(string name)=api/FruitApi/GetFruitsByName/apple
Please help me on this. Thanks
请帮我解决这个问题。谢谢
回答by Darin Dimitrov
You could have a couple of routes:
你可以有几条路线:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "ApiById",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" }
);
}
}
回答by Amit Halder - Web Spiders
config.Routes.MapHttpRoute(
name: "ApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);

