WebApi一个控制器中定义多个Get方法。

Posted longdb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebApi一个控制器中定义多个Get方法。相关的知识,希望对你有一定的参考价值。

问题:怎样解决一个ApiController中定义多个Get方法或者Post方法?

答:要想实现一个ApiController中定义多个Get方法或者Post方法,则需要在WebApiConfig类中的Register()中自定义路由规则,规则中显示指定action。

示例:

       // Web API 路由
            config.MapHttpAttributeRoutes();

            //自定义指定action的路由。2017.11.11 14:56 added by longdb
            config.Routes.MapHttpRoute(
                 name: "WebApiTest",
                 routeTemplate: "api/{controller}/{action}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );

            //默认路由规则。
            //config.Routes.MapHttpRoute(
            //    name: "WebApiTest",
            //    routeTemplate: "api/{controller}/{id}",
            //    defaults: new { id = RouteParameter.Optional }
            //);

 

ApiController中两个Get方法:

 public class WebApiTestController : ApiController
    {
        [HttpGet]
        public string GetString()
        {

            string sql = @"SELECT TOP 10 0 cnt, \'1\' ck,no,name,object,score,id FROM dbo.infor 
                WHERE id  IN(SELECT TOP 10 id FROM dbo.infor ORDER BY id)
                UNION ALL
                SELECT COUNT(id) cnt,\'1\' ck,\'\' no, \'\' name,\'\' object,\'\' score,\'\' id FROM dbo.infor";
            DataTable dt = DBHelper.DBExecuteByAdapter(sql);
            return JSONInterFace.DataTableToJsonWithJsonNet(dt);//.Rows.Count.ToString();

        }

        [HttpGet]
        public IHttpActionResult GetStudentInfor()
        {
            List<StudentModel> stlists = new List<StudentModel>();
            stlists.Add(new StudentModel { hno = "1001", hname = "龙大炳", hobject = "WebApi", hscore = "90" });
            stlists.Add(new StudentModel { hno = "1002", hname = "龙大炳", hobject = "Ajax", hscore = "80" });
            stlists.Add(new StudentModel { hno = "1003", hname = "龙大炳", hobject = "SignalR", hscore = "88" });
            return Json<List<StudentModel>>(stlists);//, Newtonsoft.Json.JsonSerializer.CreateDefault.stlists);
        }

    }

 

 

注意点:不能定义重复名称的路由,路由名称必须唯一。

 

以上是关于WebApi一个控制器中定义多个Get方法。的主要内容,如果未能解决你的问题,请参考以下文章

没有多个类的WebApi控制器

将多个参数传递给 Web API GET 方法

使用 ajax 调用 webapi get 方法时出现 405 错误

HTTP POST 方法在 WebApi 上被视为 GET

Web API 控制器中多个 HttpPost 方法的共享逻辑

如何在WebAPI的控制器的GET请求中传递参数