C# 如何在ASP.Net WebApi中正确配置路由问题
在开发了一个简单的测试ASP.NETWebAPI解决方案,将UnityInterfaceDI实现到我的控制器中之后,我遇到了一个问题:如何让我的API正确地路由到相关方法 键入以下URL将按预期返回第一个GET方法:C# 如何在ASP.Net WebApi中正确配置路由问题,c#,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc 4,Asp.net Web Api,在开发了一个简单的测试ASP.NETWebAPI解决方案,将UnityInterfaceDI实现到我的控制器中之后,我遇到了一个问题:如何让我的API正确地路由到相关方法 键入以下URL将按预期返回第一个GET方法: http://localhost:1035/api/values 在控制器中键入参数以命中GetSelectedPerson方法将永远不会注册: http://localhost:1035/api/values/Test 希望有人能告诉我哪里出了问题,这是相关的代码 应用程序启
http://localhost:1035/api/values
在控制器中键入参数以命中GetSelectedPerson方法将永远不会注册:
http://localhost:1035/api/values/Test
希望有人能告诉我哪里出了问题,这是相关的代码
应用程序启动文件夹中的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 }
);
}
}
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);
}
}
以下是来自App_Start文件夹的WebApi配置:
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 }
);
}
}
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);
}
}
下面是我在“Values”控制器中实现的两个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
,但是,在您的操作中,您有nameoperson
这里有两个选项,您可以将nameoperson
参数重命名为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
}
);
这是一个参数绑定问题。在默认路由中,预期参数名称为
id
,但是,在您的操作中,您有nameoperson
这里有两个选项,您可以将nameoperson
参数重命名为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
}
);