我已修改我的Get()
端点以获取另一个参数,但它不再起作用
public async Task<AjaxResponse> Get(long id, string appType)
{
}
这是我为新参数添加的路径配置(如果我不添加此参数,则请求返回404):
routes.MapHttpRoute(
name: "GetUser",
routeTemplate: "api/{controller}/{userId}/{appType}"
);
现在请求该端点,例如
/api/AccountApi/343434338361295/customer
最终生成Get()
端点的默认框架:
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
我的路由配置有什么问题,我该怎么做才能修复它?
作为参考,我的整个路线配置如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//ASP.NET Web API Route Config
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "CreateOrLogin",
routeTemplate: "api/{controller}/CreateOrLogin/{appType}/{userId}"
);
routes.MapHttpRoute(
name: "GetUser",
routeTemplate: "api/{controller}/{userId}/{appType}"
);
routes.MapHttpRoute(
name: "GetAdsForRetailer",
routeTemplate: "api/{controller}/GetAdsForRetailer/{userId}/{page}/{pageSize}"
);
routes.MapHttpRoute(
name: "GetLatestAds",
routeTemplate: "api/{controller}/GetLatestAds/{userId}/{maxId}"//
);
routes.MapHttpRoute(
name: "GetAd",
routeTemplate: "api/{controller}/GetAd/{userId}/{id}"//
);
routes.MapHttpRoute(
name: "RegisterUser",
routeTemplate: "api/{controller}/RegisterUser/"//
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
答案 0 :(得分:2)
我现在无法测试,但我认为您在路线中定义的名称必须与Get方法中的名称相匹配,即不是
routeTemplate: "api/{controller}/{userId}/{appType}"
你应该
routeTemplate: "api/{controller}/{id}/{appType}"
无论您给出的名称如何,路径都应该匹配,但是框架可能会尝试使用反射来确定要调用的方法,并且对于该参数,名称将是相关的。
答案 1 :(得分:0)
您的代码中有两个错误:
首先,您的第一个参数的名称不正确。请使用userId
或更新您的路由配置,如@ paolo-tedesco所述。
除此之外,Actions中的参数类型应始终为可为空。您为long
提供了userId
。其余的代码是完美的。只需在操作中尝试使用long?
。
public async Task<AjaxResponse> Get(long? userId, string appType)
{
}