[英]How to correctly configure a route issue in ASP.Net WebApi
在开发了一个简单的测试ASP.Net WebApi解决方案以在我的Controller中实现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;
}
这是一个参数绑定问题。 在默认路由中,预期的参数名称为id
,但是在您的操作中,您具有nameOfPerson
。
您在此处有两个选择,您可以将nameOfPerson
参数重命名为id
即
public IPerson GetSelectedPerson(string id)
或添加需要nameOfPerson
参数的特定路由,即
// place after default route
config.Routes.MapHttpRoute(
name: "PersonByNameApi",
routeTemplate: "api/{controller}/{nameOfPerson}",
defaults: new
{
nameOfPerson = RouteParameter.Optional
}
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.