C# ASP.NET MVC API路由

C# ASP.NET MVC API路由,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试在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}

我正在尝试在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}
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();
  }
}
我在我的WebApiConfig.cs文件中添加了一个路由,如下所示:

/{AppRoot}/api/lookup/{someKey}?i1={value1}&i2={value2}
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();
  }
}
然后我定义了一个控制器,如下所示:

/{AppRoot}/api/lookup/{someKey}?i1={value1}&i2={value2}
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();
  }
}
公共类LookupApicController
{
[HttpGet]
公共异步任务索引()
{
返回Ok();
}
}

当我在
索引
操作中设置断点时,不会调用它。我不明白为什么。我希望有一种简单的方法来查看给定路由调用了什么控制器操作,以及映射到哪个代码行。无论如何,我如何解决我的查找操作没有被调用的问题?

根据您定义的
路由模板:“api/Lookup/{action}”
,对于像
/MyApp/api/Lookup/person这样的url?i1=123&i2=test
,它将
person
作为操作名称,并将尝试在
LookupApiController
中查找不存在的名为
person
的操作

我不确定您是否要创建这些操作以适合您的结构,要使示例url点击
索引
操作,一个简单的方法是将您的路径更改为:

config.Routes.MapHttpRoute(
  name: "LookupApi",
  routeTemplate: "api/lookup/{someKey}",
  defaults: new { controller = "LookupApi", action = "Index" }
);
这样,url中的
人员
将不再表示操作名称,您可以在
索引
操作中获取该值作为参数:

public class LookupApiController
{
  [HttpGet]
  public async Task<IHttpActionResult> Index(string someKey)
  {
    //DO something
    return Ok();
  }
}
公共类LookupApicController
{
[HttpGet]
公共异步任务索引(字符串someKey)
{
//做点什么
返回Ok();
}
}