0

カスタム 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 を使用して呼び出そうとすると機能しませんが、GetByPricelist メソッドをデフォルトの Get() に置き換えると、uri /api/optionalgroup で機能します

4

1 に答える 1

1

解決策を見つけました。ApiConfig 行 routeTemplate: "api/{controller}/{action}"を 次のように置き換えただけです。routeTemplate: "api/{controller}/{action}/{id}"

于 2013-02-08T10:54:14.380 に答える