简体   繁体   English

自定义API控制器方法

[英]Custom API Controller method

Im trying to create a custom API Controller method. 我正在尝试创建自定义API控制器方法。 I want to call it by using /api/optionalgroup/getbypricelist/{id} But cant get it to work. 我想使用/ api / optionalgroup / getbypricelist / {id}来调用它,但是无法正常工作。

This is my WebApiConfig 这是我的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);
}

} }

And this is my ApiController 这是我的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)
        {
        }
    }
}

But when i try to call it using uri /api/optionalgroup/getbypricelist/5 it doesnt work, but if i replace the GetByPricelist method with the default Get() it works with uri /api/optionalgroup 但是当我尝试使用uri / api / optionalgroup / getbypricelist / 5调用它时,它不起作用,但是如果我用默认的Get()替换GetByPricelist方法,它将与uri / api / optionalgroup一起使用

I found the solution. 我找到了解决方案。 Just replaced the ApiConfig line routeTemplate: "api/{controller}/{action}" , with routeTemplate: "api/{controller}/{action}/{id}" 刚刚将ApiConfig行routeTemplate: "api/{controller}/{action}"替换为routeTemplate: "api/{controller}/{action}/{id}"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM