我已经设置了路由模板:通配符的WebAPI路径模板
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”:“对象引用不是s “,”ExceptionType“:”System.NullReferenceException“,”StackTrace“:” at System.Web.Http.ValueProviders.Providers.RouteDataValueProviderrs.Providers.RouteDataValueProvider.d__4.MoveNext()\ r \ n
奇怪的是,http://mymachine.com/api/Individuals?id=1&abc=4确实与控制器,动作和参数匹配。
我想起了 “(编号)” “API/{}控制器/ (编号)/{*}通配符” 将起作用。
为什么?
你不能有可选参数,然后是非可选的参数!另外,如果您将abc作为查询字符串传递,那么您不需要在路由中使用它!如果我在你的位置,我会重做我的路线......给它一个想法 –