[英]ASP.NET MVC API Routing
我正在尝试在ASP.NET MVC应用程序中创建到API的路由。 对该API的调用示例如下所示:
/MyApp/api/lookup/person?i1=123&i2=test
/MyApp/api/lookup/product?i1=597&i2=1234
/MyApp/api/lookup/order?i1=1&i2=597
路线的一般结构如下:
/{AppRoot}/api/lookup/{someKey}?i1={value1}&i2={value2}
我在WebApiConfig.cs文件中添加了一条如下所示的路由:
config.Routes.MapHttpRoute(
name: "LookupApi",
routeTemplate: "api/lookup/{action}",
defaults: new { controller = "LookupApi", action = "Index" }
);
然后,我有一个这样定义的控制器:
public class LookupApiController
{
[HttpGet]
public async Task<IHttpActionResult> Index()
{
return Ok();
}
}
当我在Index
操作中设置一个断点时,它不会被调用。 我不理解为什么。 我希望有一种简单的方法来查看给定路由所调用的Controller Action以及映射到的代码行。 无论哪种方式,如何解决我的Lookup操作未得到调用的问题?
根据您定义的routeTemplate: "api/lookup/{action}"
,对于/MyApp/api/lookup/person?i1=123&i2=test
这样的网址,它将以person
作为动作名称,并尝试查找名为person
在LookupApiController
不存在。
我不确定是否要创建适合您的结构的操作,使示例url进入Index
操作的直接方法是将您的路线更改为:
config.Routes.MapHttpRoute(
name: "LookupApi",
routeTemplate: "api/lookup/{someKey}",
defaults: new { controller = "LookupApi", action = "Index" }
);
这样,您网址中的person
将不再代表操作名称,您可以在Index
操作中获取该值作为参数:
public class LookupApiController
{
[HttpGet]
public async Task<IHttpActionResult> Index(string someKey)
{
//DO something
return Ok();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.