我是MVC的新手,但我正在尝试创建一个MVC Web API,我遇到了路由问题。
我正在尝试使用以下网址格式:
/api/venue/1999 // doesn't work
/api/venue/1999/images/ // works
第二个URL模式工作正常,但如果我尝试访问第一个,我收到一个错误,上面写着:
找到与请求匹配的多个操作: VenuefinderWebAPI.Models.Venue获取(Int32)类型 VenuefinderWebAPI.Controllers.VenueController System.String [] VenuefinderWebAPI.Controllers.VenueController类型的图像(Int32)
我不确定我的路由是错误的(多个匹配)还是我的控制器类中的某些东西。怎么解决这个问题?
在我的webApiConfig中,我有这个:
config.Routes.MapHttpRoute(
name: "VenueImages",
routeTemplate: "api/venue/{venueID}/images/",
defaults: new { controller="Venue", action = "images" }
);
config.Routes.MapHttpRoute(
name: "VenueDefault",
routeTemplate: "api/venue/{venueID}",
defaults: new { controller = "Venue" }
);
VenueController.cs有:
// GET api/venue/5
public Venue Get(int venueID)
{
// code
}
and
[HttpGet]
[ActionName("images")]
string[] Images(int venueID)
{
// code
}
答案 0 :(得分:3)
您可以尝试添加操作默认值,如下所示:
config.Routes.MapHttpRoute(
name: "VenueDefault",
routeTemplate: "api/venue/{venueID}",
defaults: new { controller = "Venue", action = "Venue" },
new { venueID = @"\d+" }
);
注意,我还在sceneID上添加了一个约束,因此它只匹配整数
答案 1 :(得分:3)
试试这个......
更改场地控制器:
public string Get(int venueID)
{
// code
}
[HttpGet]
public string[] Images(int venueID)
{
// code
}
更改路线:
config.Routes.MapHttpRoute(
name: "VenueDefault",
routeTemplate: "api/venue/{venueID}/{action}",
defaults: new { controller = "Venue", action = "get" },
constraints: new { venueID = @"\d+" }
);
*在路线上添加了迈克的约束。
---以上是做什么---
该路由与url匹配,其中venueID是一个数字,除非另有说明,否则action方法默认为get方法。
请记住,操作方法是控制器中的方法。