C# 自定义API控制器方法

C# 自定义API控制器方法,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试创建一个自定义API控制器方法。 我想使用/api/optionalgroup/getbypricelist/{id}调用它 但它无法工作 这是我的网页 public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "ApiByAction", routeTemplate: "api/{controller}/{action}",

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

这是我的网页

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)
        {
        }
    }
}
公共类OptionalGroupController:ApicController
{
//获取api/optionalgroup
公共IEnumerable GetByPricelist(int id)
{
返回新字符串[]{“value1”,“value2”};
}
//获取api/optionalgroup/5
公共字符串Get(int-id)
{
返回“值”;
}
//后api/可选组
公共作废帖子([FromBody]字符串值)
{
}
//放置api/可选组/5
公共void Put(int id,[FromBody]字符串值)
{
}
//删除api/optionalgroup/5
公共无效删除(int-id)
{
}
}
}
但是,当我尝试使用uri/api/optionalgroup/getbypricelist/5调用它时,它不起作用,但是如果我用默认的Get()替换getbypricelist方法,它可以与uri/api/optionalgroup一起工作,我找到了解决方案。 刚刚替换了ApiConfig行
routeTemplate:“api/{controller}/{action}”
, 具有
routeTemplate:“api/{controller}/{action}/{id}”