【发布时间】:2013-11-01 11:11:31
【问题描述】:
我已经设置了路线模板:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{*wildcard}",
defaults: new { id = RouteParameter.Optional }
);
控制器的动作签名:
public IEnumerable<object> Get(Int64 id,string abc)
我尝试将它与 URL http://mymachine.com/api/Individuals/1?abc=4 匹配,但它给了我一个例外
{"$id":"1","Message":"有一个错误 发生。","ExceptionMessage":"对象引用未设置为实例 一个 对象。","ExceptionType":"System.NullReferenceException","StackTrace":" 在 System.Web.Http.ValueProviders.Providers.RouteDataValueProvider.d__4.MoveNext()\r\n
奇怪的是,http://mymachine.com/api/Individuals?id=1&abc=4 确实与控制器、动作和参数匹配。
我认为“api/{controller}/{id}/{*wildcard}”的“{id}”会起作用。
为什么?
【问题讨论】:
-
你不能有可选参数然后是非可选参数!此外,如果您将 abc 作为查询字符串传递,那么您不需要在路由中包含它!如果我在你的位置,我会重做我的路线......考虑一下
标签: c# asp.net asp.net-mvc asp.net-web-api