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

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

答:要想实现一个ApiControl中定义多个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 }
            //);

ApiControl中两个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);
        }

    }

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

时间: 2024-09-30 03:31:59

WebApi一个控制器中定义多个Get方法。的相关文章

C#判断一个类中有无&quot;指定名称&quot;的方法

C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 using System; using System.Reflection; namespace Hello {     class Program     {  

C语言引用另一个源文件中定义的数组

C语言中是可以引用另外一个源文件的全局数组的,但是不能引用局部数组. 引用方式举例如下: 设a.c文件有有数据定义 int  array1[10]; 现有b.c文件中想访问a.c中的array1数组 那么b.c文件中首先添加如下语句 extern int array1[10]; 然后就可以访问数组array1和它的元素了.

关于使用 pushViewController: animated: 方法在下一个控制器中拿不到值的解决方法

如下代码: // 加载一个tabbar控制器 houseMessageTabbarController *houseTabbar = [[houseMessageTabbarController alloc] init]; // 使用创建的模型传递数据 houseTabbar.messageItems = [meterMessageItems objectWithKeyValues:self.houseNameArray[indexPath.row]]; houseTabbar.testTitl

bug日记之---------js中调用另一个js中的有ajax的方法, 返回值为undefind

今天做一个OCR授权的需求, 需要开发一个OCR弹框, 让用户选择是否授权给第三方识别公司(旷世科技)保存和识别用户个人信息, 照片等. 其中用到了在一个js的方法中调用另外一个js的方法, 其中有一点特别的是另外一个js的方法中会进行一个ajax, 会根据ajax返回的结果来进行返回true或者false. 在测试的过程中我发现不管怎么弄, 最后返回的都是undefind. 下面来模拟一下这个场景 上面这个例子中,flag一直都是undefind,ajax已经是同步的情况下依旧返回undefi

sqlite expert导入excel表格 (包括使用问题、以及把 一个表的数据插入到另一个表中)

一.sqlite导入excel 1.打开要导入的excel --- 另存为(2007版点击左上角OFFICE图标即可找到) --- 保存类型:CSV类型 (提示什么不兼容什么的,一律点确定.) 2.打开sqlite expert ,选择建好的数据库文件(或者是导入的已存在的db文件,或者是自己新建一个.db数据库文件). 右击文件名---选择最后一个import text file(CSV,TSV) 3.(如果没有建过和这个excel名相同的表)右边Destination选择第一项new tab

在spring容器中定义初始化和销毁bean前所做的操作,有三种方式

1.使用注解,通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 package com.luoq.test.annotation.init; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class TestBean { private String message; public String getMessage()

PHP中的__call和__callStatic方法

如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的方法(如未定义,或者不可见时), __call()就会被调用.其中$name参数是要调用的方法名称.$arguments参数是一个数组,包含者要传递给方法的参数, 如下所示: <?php class HandsonBoy { private $name = 'chenqionghe'; privat

JavaScript中创建自定义对象的方法

本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构体,结构体中有一些它的基本属性以及对结构体处理的方法,把它们封装起来称为一个整体.JS中所有的对象都是基于一个引用类型创建,这个引用类型可以是原生类型,如Array,Date等,也可以是开发人员自定义的类型. 下面主要总结下JS中创建对象的几种模式,分析他们各自的优缺点. 1. 工厂模式 /****

javascript构造函数类和原型prototype定义的属性和方法的区别

1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每个实例中再复制一份,所以消耗的内存更高所以没有特殊原因,我们一般把属性写到类中,而行为写到原型中2.构造函数中定义的属性和方法要比原型中定义的属性和方法的优先级高,如果定义了同名称的属性和方法,构造函数中的将会覆盖原型中的代码如下: <!DOCTYPE html> <html> <