您好我有海关config.Routes.MapHttpRoute
,但是API强迫我使用查询字符串作为参数而不是/ etc分隔的常规参数有这个... api / data / 2/23。
如果我将我的API称为...api/collectdata/1
它不起作用,但如果我这样调用它可以正常工作...api/collectdata?researchid=1
这就是我在WebApiConfig中的内容
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
config.Routes.MapHttpRoute(
name: "CollectDataFromPets",
routeTemplate: "api/collectdata/{researchid}");
我的控制器看起来像这样:
public IHttpActionResult CollectData(int researchId)
{
try
{
service.SaveDataByResearchId(researchId);
return Ok(new { Message = "Data collected and saved" });
}
catch (Exception e)
{
return new CustomError(e.Message,Request);
}
}
答案 0 :(得分:2)
路线顺序很重要。您的通用(DefaultApi
)路由必须最后声明,因为它是"贪婪" - 否则它将捕获所有请求,防止其他路线被踢入
您的特定路线未定义控制器,您需要将其修改为:
config.Routes.MapHttpRoute(
name: "CollectDataFromPets",
routeTemplate: "api/collectdata/{researchid}",
defaults: new {controller = "CollectData"} //or whatever your controller name is
);