在开发了一个简单的测试 ASP.Net WebApi 解决方案以在我的控制器中实现 Unity 接口 DI 之后,我遇到了让我的 API 正确路由到相关方法的问题。
键入以下 URL 将按预期返回第一个 GET 方法:
http://localhost:1035/api/values
在控制器中输入一个参数以点击 GetSelectedPerson 方法永远不会被注册:
http://localhost:1035/api/values/Test
希望有人能告诉我哪里出错了,相关代码如下。
App_Start 文件夹中的 RouteConfig:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
这是 App_Start 文件夹中的 WebApi 配置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}
以下是我在“值”控制器中实现的两种 GET HTTP 方法:
public class ValuesController : ApiController
{
private IPersonCreator _createPerson;
public ValuesController(IPersonCreator createPerson)
{
_createPerson = createPerson;
}
//GET api/values
public IPerson Get()
{
return _createPerson.CreateNewPerson();
}
//**********Issue: This Method is never hit.**********
public IPerson GetSelectedPerson(string nameOfPerson)
{
IPerson selectedPerson = null;
var returnedPeople = _createPerson.CreateNewPeople();
foreach (var person in returnedPeople)
{
if (person.Name == "John")
{
selectedPerson = person;
}
}
return selectedPerson;
}