使用C#Controller处理可选参数的自定义URL路由

时间:2015-07-20 14:59:11

标签: c# asp.net asp.net-mvc

我在使用ListPeople导航到URL方法时遇到问题。如果我在localhost:12345/People?peopleId=405&age=24中输入URL,它就能正常工作;但是,当我将localhost:12345/People?peopleId=405传递到URL时,会返回404错误。

  

404错误消息:

     

"No HTTP resource was found that matches the request URI'http://localhost:12345/People?peopleId=405'."

如何更改ListPeople控制器的路由,使其超出 BOTH 网址?

控制器

[HttpGet]
[ReturnDescription("List of People")]
[CustomActionName("")]
[Description("List of people  for given peopleId and age")]
public ApiResponse<Status, IEnumerable<People>> ListPeople(int peopleId, int? age)
{
    return _personProject.ListPeople(peopleId, age);
}

成功的网址

localhost:12345/People?peopleId=405&age=24

网址失败

localhost:12345/People?peopleId=405

2 个答案:

答案 0 :(得分:1)

如上所述,您有一个代表网址的方法:

/People?peopleId={0}&age={0}

您必须进行仅接受peopleId的重载,因为当您自动设置此方法时,方法只能是一条路线的目标。我建议的是做一个简单的过载:

public ApiResponse<Status, IEnumerable<People>> ListPeople(int peopleID)
{
    return ListPeople(peopleId, null);
}

答案 1 :(得分:1)

抱歉,我不能写评论。所以我必须写在这里。如果你使用api检查你的WebApiConfig。您必须在此配置中定义参数。

像;

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{peopleid}/{age}",
            defaults: new { peopleid = RouteParameter.Optional, age = RouteParameter.Optional }
        );

只是一个例子。我想我可以帮到你。