自定义API控制器方法

本文关键字:方法 控制器 API 自定义 | 更新日期: 2023-09-27 17:58:14

我正在尝试创建一个自定义的API控制器方法。我想使用/api/optionalgroup/getbypricelist/{id}调用它但无法使其发挥作用。

这是我的WebApiConfig

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "ApiByAction",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { action = "Get", id = RouteParameter.Optional }
    );
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    var json = config.Formatters.JsonFormatter;
    json.SerializerSettings.PreserveReferencesHandling =
        Newtonsoft.Json.PreserveReferencesHandling.Objects;
    config.Formatters.Remove(config.Formatters.XmlFormatter);
}

}

这是我的ApiController

    public class OptionalGroupController : ApiController
    {
        // GET api/optionalgroup
        public IEnumerable<string> GetByPricelist(int id)
        {
            return new string[] { "value1", "value2" };
        }
        // GET api/optionalgroup/5
        public string Get(int id)
        {
            return "value";
        }
        // POST api/optionalgroup
        public void Post([FromBody]string value)
        {
        }
        // PUT api/optionalgroup/5
        public void Put(int id, [FromBody]string value)
        {
        }
        // DELETE api/optionalgroup/5
        public void Delete(int id)
        {
        }
    }
}

但是,当我尝试使用uri/api/optionalgroup/getbypricelist/5调用它时,它不起作用,但如果我用默认的Get()替换getbypricelist方法,它会与uri/api/optionalgroup 一起起作用

自定义API控制器方法

我找到了解决方案。刚刚替换了ApiConfig行CCD_ 1,具有routeTemplate: "api/{controller}/{action}/{id}"