Web Api 2 MapHttpRoute不起作用,迫使我使用查询字符串

时间:2014-09-09 19:55:21

标签: c# .net asp.net-web-api routes asp.net-web-api-routing

您好我有海关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);
              }
          }

1 个答案:

答案 0 :(得分:2)

  1. 路线顺序很重要。您的通用(DefaultApi)路由必须最后声明,因为它是"贪婪" - 否则它将捕获所有请求,防止其他路线被踢入

  2. 您的特定路线未定义控制器,您需要将其修改为:

        config.Routes.MapHttpRoute(
            name: "CollectDataFromPets",
            routeTemplate: "api/collectdata/{researchid}",
            defaults: new {controller = "CollectData"} //or whatever your controller name is
        );