我的MVC路由有问题。
我正在尝试访问以下网址...“ http:// localhost / api / Countries ”
我按以下顺序定义了以下路线......
RouteTable.Routes.MapHttpRoute(
name: "Continents",
routeTemplate: "api/countries/Continents",
defaults: new { controller = "countries", Action="Continents" }
);
RouteTable.Routes.MapHttpRoute(
name: "CountryRegions",
routeTemplate: "api/countries/Regions",
defaults: new { controller = "countries", Action = "CountryRegions" }
);
RouteTable.Routes.MapHttpRoute(
name: "CountryByCodeApi",
routeTemplate: "api/{controller}/{countryCode}",
defaults: new { controller="countries", countryCode = System.Web.Http.RouteParameter.Optional }
);
每当我转到所需的网址时,我都会收到错误“ 找到符合请求的多项操作 ”。如果routeTemplate属性的第三个段是可选的,那么这是有意义的但是我的理解是,通过不将它括在大括号中,它使它成为目标中的 必需 段URL。显然,“http:// localhost / api / countries”不包括“Continents”或“Regions”,所以为什么它们会被识别为匹配请求。
雅'知道。这些路线看起来像一个简单的东西,但是当你开始它时,这是一个神秘的,如RegEx的!!!!有什么想法?
答案 0 :(得分:1)
最后一个路由定义不通过路由定义提供操作名称,也不通过路由默认提供它。如果路由定义应该省略它,那么将其添加到默认值:
routes.MapRoute(
"CountryByCodeApi",
"api/{controller}/{countryCode}",
new {
controller="countries",
countryCode = RouteParameter.Optional,
action = "CountryCodes"
}
);
请注意,这只是最后一个路径定义。上层夫妇保持原样。
public ActionResult CountryCodes(string countryCode)
{
// do whatever you please
}