C# api接口不固定参数get传参

要写一个C#的api访问接口,get方式传参,需求:参数个数和参数名不固定。例如:
参数是 element,time,class,则后台实现 select element from tab1 where datatime>time and className=class;
如果传参数 element, time,class,order,则后台实现 select element from tab1 where datatime>time and className=class order by order;
还要类似很多这种情况, 怎么写一个通用的方法实现

6个回答

你这个是针对sql脚本的,首先,你要针对这种形式写一个接收参数的class.
例:
public class searchClass{
public string display{get;set;}//多个参数可以用,形式,例 如:a,b,c,element
public string table{get;set;}
public List conditions{get;set;}
//可以加更多参
}

public class searchCondition{
public string key {get;set;}
public string value{get;set;}
public string fn{get;set;}// > < = ...
}

public IctionResult Api(searchClass param)
    {
      string sql = " select "+param.display+" from " + param.param ;
      if(param.conditions!=null && param.conditions.count()>0)
      sql+=" where 1=1 ";

foreach (var item in param.conditions) sql += " and " + item.key + item.fn + item.value;
if (o != null) sql += " order by" + o;
}

weixin_37617896
年少的隔壁老王 只能在后台定义参数类了,返回字段是一个参数,每个条件一个参数,写接口的时候参数用 [FromUri]
大约一年之前 回复
 DataSet MyQuery(string tablename, string[] param, string[] op, string[] cond, string o)
{
string sql = " select element from " + tablename + " where 1=1 ";
foreach (var item in param.Zip(op, (x, y) => new { x, y }).Zip(cond, (x, z) => new { x.x, x.y, z }))
sql += " and " + item.x + item.y + item.z;
if (o != null) sql += " order by" + o;
...
}
 element,time,class
MyQuery("element", new string[] { "datetime" }, new string[] { ">" }, new string[] { time }, null);

element, time,class,order
MyQuery("element", new string[] { "datetime", "className" }, new string[] { ">", "=" }, new string[] { time, class }, "order");

上面的有点错误,这样

 DataSet MyQuery(string sel, string[] param, string[] op, string[] cond, string o)
{
string sql = " select " + sel + " from tab1 where 1=1 ";
foreach (var item in param.Zip(op, (x, y) => new { x, y }).Zip(cond, (x, z) => new { x.x, x.y, z }))
sql += " and " + item.x + item.y + item.z;
if (o != null) sql += " order by" + o;
...
}

参数名不固定的话怎么知道这个参数是用到select还是where或者是order?
应该是约定好参数名,参数个数可以不固定,如果没有上送,则这个参数不参与查询就行。

或者可以前后台约定一个参数前缀,带有select_ 前缀的用于select .

首先你要区分传进来的参数是查询字段,还是查询条件,还是排序啊、分组啊什么的,这个是前提。
其次我感觉你需要的是一个高级查询,你需要定义一个类来处理你的参数,我给你写个样例,你对照着看能不能实现你的目的
public class TestFilter
{
public string time;
public string time2;
public OPDate timeWhere;
public string classValue;
public OPString classWhere;

    public string GetFilterString()
    {
        StringBuilder FilterString = new StringBuilder();
        FilterString.Append(GetOPString("", timeWhere, time, time2, "and"));
        FilterString.Append(GetOPString("", classWhere, classValue, "and"));
        return FilterString.ToString();

    }

    public string GetOPString(string FieldString, OPString MyOPString, string MyString, string OPLG = "AND")
    {
        if (OPLG == "AND" || OPLG == "or")
        {
            switch (MyOPString)
            {
                case OPString.等于:
                    return OPLG + " " + FieldString + " = '" + MyString + "'";
                case OPString.不等于:
                    return OPLG + " " + FieldString + " <> '" + MyString + "'";
                case OPString.包含:
                    return OPLG + " " + FieldString + " like '%" + MyString + "%'";
                case OPString.以之开头:
                    return OPLG + " " + FieldString + " like '" + MyString + "%'";
                case OPString.以之结尾:
                    return OPLG + " " + FieldString + " like '%" + MyString + "'";
                default:
                    return "";
            }

        }
        else
        {
            return "";
        }
    }

    public string GetOPString(string FieldString, OPDate MyOPString, string MyDate, string MyDate2, string OPLG = "AND")
    {
        if (OPLG == "AND" || OPLG == "or")
        {
            switch (MyOPString)
            {
                case OPDate.早于:
                    return OPLG + " " + FieldString + " <= '" + MyDate + "'";
                case OPDate.晚于:
                    return OPLG + " " + FieldString + " >= '" + MyDate + "'";
                case OPDate.等于:
                    return OPLG + " " + FieldString + " = '" + MyDate + "'";
                case OPDate.两者之间:
                    return OPLG + " (" + FieldString + " >= '" + MyDate + "' and " + FieldString + " < '" + MyDate2 + "')";
                default:
                    return "";
            }
        }
        else
        {
            return "";
        }
    }

    public enum OPString
    {
        无 = 1,
        等于 = 2,
        不等于 = 3,
        包含 = 4,
        以之开头 = 5,
        以之结尾 = 6
    }

    public enum OPDate
    {
        无 = 1,
        早于 = 2,
        晚于 = 3,
        等于 = 4,
        两者之间 = 5
    }

}

    上面的代码我给你写了处理查询条件的东西,有多少字段你就写多少个对应的条件字段和值字段的属性就可以。使用的时候,你只要实例化这个类,通过判断你的参数有那些,给对应的条件字段赋值,然后调用那个GetFilterString方法,在这个方法里面去做各种筛选,就可以拼接你的sql了
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
get传参怎样加参数
如题,Response.Redirect("buy.aspx?id="+id);rnrn想加一个参数应该怎么写,以前记得,就是忘了,呵呵
不固定参数求和,arguments
不固定参数求和,arguments啥也不说了,先上代码:function add(){ var sum =0; for(var i=0;i<arguments.length;i++){ sum += arguments[i]; } alert(sum); }
axio get传参。
封装的axios是这样的。https://blog.csdn.net/qq_33769914/article/details/88286942 get方式传参。参数直接接在url路径的后面。一共有三个参数。没有值时这个参数不传。 访问的接口是这样的。http://api.wkzj.com/enrolstudent/paperexport/batchexport?username=张三&amp;a...
关于AJAX的GET传参
first.htmlrnsecond.jsprn-----------------rnfirst.htmlrnrnrnrn 获取XMLHttpRuquest所有请求头 rn rn rn rnrnrnrn 中国rn 美国rn 日本rnrnrn rnrnrn------------------------------------------------------------rnsecond.jsprn<%@ page contentType="text/html; charset=GBK" language="java" %>rn<%rn//从服务器获取id参数rnint id = Integer.parseInt(request.getParameter("id"));rn//根据id的值,确定需要返回给客户端的信息,返回客户端的城市信息以$符号隔开rnswitch(id)rnrn case 1:rn%>rn上海$广州$北京rn<%rn break;rn case 2:rn%>rn华盛顿$纽约$加洲rn<%rn break;rn case 3:rn%>rn东京$大板$福冈rn<%rn break;rnrn%>rn---------------------------------------rnfirst模拟为客户端代码,second为服务器代码,first向second请求参数,点击每个国家名字,右边的select会显示请求数据,我的代码都是照书打的,对到后来,发现没什么错误,但是点击国家,右边就是显示不出服务器数据,不知道那里错了!rn请高手回答。
get中文传参(解码)
get中文传参(解码) new String()
URL get传参中文乱码
当ajax请求通过get方式传参,参数为中文时显示乱码。 编码:encodeURI(encodeURI("包含中文的串")); java后台解码:java.net.URLDecoder.decode("需要解码的串","utf-8");
Spring_MVC GET 传参中文乱码
在项目web.xml里配置拦截器<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encodin
get无法传参的问题
在做vue项目的时候,get方法一直无法传参,问了度娘才知道, 噢,原来需要params this.$axios.get('/api/Home/File', {params: {id: 10}}).then((res) =&amp;gt; { …… })
django get请求传参
node2:/django/mysite/blog#cat views.py # -*- coding: utf-8 -*- from __future__ import unicode_literals # from django.shortcuts import render, render_to_response from .models import * # Create your vie
get传参解析
Word文档,get传参讲解,喜欢的朋友可以下载下来看看,讲的很不错
get传参,一般处理程序
web程序走的是,相对路径。 拿到用户在html里输入的用户名和密码 1.get方式传递数据,只能通过URL来传递。格式:[URL]?key1 = value1&amp;amp;key2 = value2&amp;amp;key3 = value3    用context.Request.QueryString[&quot;pwd&quot;]; context.Response.Write(context.Requ...
ExpressJs--入门(动态传参/get传参)
 Express 简单介绍 Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架 Express 框架是后台的 Node 框架,所以和 jQuery、zepto、yui、bootstrap 都不一个东西。 Express 在后台的受欢迎的程度类似前端的 jQuery,就是企业的事实上的标准。 Express 特点: 1. Express 是一个基于 Node.j...
c#分页程序页数不固定???
写了一个分页程序。是用键盘可以控制的,就像小说阅读网里面的,上一条、下一条,翻到最后一条可以分页。可是为什么我翻到最后一条分页的时候下一页又会出现重复的最好一条数据,页数也多一页。怎么回事?rn protected void btn_up_Click(object sender, EventArgs e) //上一条rn rn if (MyGridView.SelectedIndex == 0)rn rn if (MyGridView.PageIndex == 0)rn rn IsmmScript.ShowMessage("已是第一条!", true);rn return;rn rn elsern rn MyGridView.PageIndex -= 1;rn MyGridView.DataBind();rn MyGridView.SelectedIndex = MyGridView.Rows.Count - 1;rn rn rn else if (MyGridView.SelectedIndex < 0)rn rn MyGridView.SelectedIndex = MyGridView.Rows.Count - 1;rn rn elsern rn MyGridView.SelectedIndex -= 1;rn rn MyGridView.SelectedRow.Focus();rn rn protected void btn_down_Click(object sender, EventArgs e) //下一条rn rn if (MyGridView.SelectedIndex == MyGridView.Rows.Count - 1)rn rn if (MyGridView.PageIndex == MyGridView.PageCount - 1)rn rn IsmmScript.ShowMessage("已是最后一条!", true);rn return;rn rn elsern rn MyGridView.PageIndex += 1;rn MyGridView.SelectedIndex = 0;rn rn rn else if (MyGridView.SelectedIndex < 0)rn rn MyGridView.SelectedIndex = 0;rn rn elsern rn MyGridView.SelectedIndex += 1;rn rn MyGridView.SelectedRow.Focus();rn rn
C#调用SQL Server参数过程传参
C#调用SQL Server参数过程传参,传参/输出/返回值
C#:不确定参数个数传参 关键字 params
using Microsoft.VisualBasic; using System; using System.Diagnostics; using System.Threading; using System.Windows.Forms; namespace WindowsFormsApp13 { public partial class Form1 : Form { ...
如何写形参数不固定的函数
如同printf()的参数一样参数数目不定的函数怎么写?rn其实我是在一个程序中要在每次调用printf前后做很多同样工作,所以想将它们一起(包括printf)写成一个函数。但不知道这个函数该怎么定义,因为它的参数肯定要包括printf的参数,而printf的参数又是不定长的。
截取get传参返回对象方法
/** * 截取地址栏location返回对象 * @returns {object} * @public * */ function showWindowHref(){     var sHref = window.location.href;     var args = sHref.split('?');     if(args[0] == sHref) return &quot;&quot;...
求教!关于不固定个数的参数
很多大虾都说过没发现过VC++能做而Delphi做不了的东东,我以前也深信不疑,不过最近遇到一个问题:rn在C++中可以这样声明rn_CRTIMP int __cdecl sprintf(char *,const char *,...); rn所以就可以有若干个参数(个数不定)rn我知道Delphi中也有Writeln、Readln等不定参数的方法,可是查看其声明才知是从Dll中引入的。难道Delphi真的做不到吗?
IE get请求传参中文乱码
传参中文乱码
get传参最后一个字乱码问题
tomcatrn页面编码:UTF-8rn通过get传参如:showInfo.jsp?username=中国人rn在服务端通过iso8859-1转utf-8后最后一个字"人"是乱码rn什么原因?
JAVA GET传参中文乱码问题
项目使用SSM项目架构,Spring MVC中文过滤器只能过滤POST请求,网上大部分教程通过修改Tomcat配置文件修改get传参时中文乱码问题: &amp;lt;Connector connectionTimeout=&quot;20000&quot; port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot; redirectPort=&quot;8443&quot; URIEncoding=&quot;UTF-8&quot;/&amp;gt; 这种
利用get和post的传参(客户端)
1、链接服务 URL url = new URL(httpUrl); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(10000);//设置连接超时时间 con.setRequestMethod("GET"); //设置请求方法 此处需大写 此时
url传参——GetRequest函数修复
当A页面通过ajax获取后台数据(dataFp)进行渲染完毕后,进入B页面,从B再返回A页面,当后台压力太大不想再去ajax请求得到数据(dataFp)再次渲染A页面,此时可以考虑url传参,我们常用法1,但是当涉及对象传参(dataFp下面某个属性含中文)会出现乱码;queryCompany(中文)却不含乱码问题。采用decodeURI代替unescape进行解码,对GetRequest函数进行优化,即可解决。
RestTemplate的get传参和接收问题
我最近才知道Spring有个RestTemplate于是想在实际开发中试试,可却遇到个奇怪的问题,我要调通的目标接口是C#编写的一个接口,接口可用Http get方法访问,我用RestTemplate先进行了如下调用rn[code=java] String result=template.getForObject("http://172.16.88.128/shortmessageservice.asmx/Send?sysName=DFCFMonitor&phoneNumbers=123123123123&content=2131&priority=1", String.class);[/code]rn返回结果一切正常(因为我的IP还没开相应权限)rn[code=text]rn"success":false, "message":"您的IP地址没有授权-172.16.20.162", "messageid":-1[/code]rn可是当我如下使用时就报错了rn[code=java]RestTemplate template=new RestTemplate();rn Map info=new HashMap();rn info.put("sysName","DFCFMonitor");rn info.put("phoneNumbers","123123123123");rn info.put("content","2131");rn info.put("priority","1");rn String result=template.getForObject("http://172.16.88.128/shortmessageservice.asmx/Send", String.class,info);[/code]rn错误如下,不知道为何会如此,而且我少传参数测试表明:对方的接口是有参数校验的,问题应该在我这,错误500也很让我费解,求教到底是怎么回事?还有就是我搞如何解析这样XML里夹杂jeson的返回格式(目前的唯一想法就是subString,有没有更好点的)rnException in thread "main" org.springframework.web.client.HttpServerErrorException: 500 Internal Server Errorrn at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)rn at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641)rn at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597)rn at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:565)rn at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:272)
关于get方式传参乱码问题
方法一: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>在tomcat的conf/server.xml里增加URIEncoding=”UTF-8”方法二: 在接收参数的的方法
javaEE开发对于get传参的问题
get请求中参数中包含一些特殊字符如:+,-等要用转义字符表示,否则会被浏览器识别为空。或者采用post请求的方式进行传递参数。
tomcat解决get传参乱码问题
1.Tomcat的默认编码为ISO8859-1,所以在用get方式传递带中文的参数时会出现乱码问题。 2.解决方法如下: (1)找到Tomcat的安装目录,在目录下找到conf/server.xml文件 (2)找到如下代码: ​ &amp;lt;Connector acceptCount=&quot;100&quot; connectionTimeout=&quot;20000&quot; disableUploadTime...
为什么printf和scanf的参数个数不固定?
一般写函数时,参数个数都是固定的,但为什么这两个函数这么特殊?怎么实现的?rn新手,分数有限,期待高手解答!
如何定义参数个数不固定的函数?
如何定义一个参数个数不固定的函数?如何调用?rnrn谢谢!!
反射invoke时调用参数不固定
想用invoke函数调用一个参数不固定的函数,rn比如函数原型为rnvoid printNum(int ...nums)rnrn for(int i = 0; i < nums.lenght; i++)rn rn System.out.println(nums[i]);rn rnrnrn反射调用时使用如下代码rnMethod[] method = c.getDeclaredMethods();rnmethod[0].invoke(this, 5,4);rnrn报错:rnwrong number of argumentsrn请问这个问题怎么解决?多谢!rnrnrnrn
get传参如何传递数组
test.php?myarray%5Bdiscuz_uid%5D=1&myarray%5Btid%5D=330&myarray%5Btimestamp%5D=1173356908 在test.php里面 print_r($_GET); Array (     [myarray] => Array         (             [discuz_uid] => 1  
get和post传参过程中的问题
从页面请求的post和get方法中的param中 后台接收的参数会将“+”改为空格 后台需要将空格replace为&quot;+&quot;;
YII框架get,post传参
yii中   通过request组件来获取get,post参数 获取get传参: $request = \Yii::$app->request; echo $request->get('id'); 获取get传参给默认值 $request = \Yii::$app->request; $id = $request->get('id',1);// 1为不传参数默
get和post的区别(传参方式)
 传值的方法有2种,   这两种方式跟HTTP请求时所使用的请求方式直接相关: GET / POST   get和post的区别首先:从本质上区别   1.GET用于信息获取(查)  工   2.POST表示可能修改变服务器上的资源的请求(增删改)   再者:从表现形式上区别   1.如果使用GET请求,需要传递参数时,只能通过URL传值   2.如果使用POST请求,需要传递参数时,能够通过表...
一个简单的get传参的问题!
听人说Get 里面不能有带括号的参数,请问是这样吗!?rnResponse.Redirect("../ProjectManage/DataShow.aspx?flowname="+flowname+"");rnflowname是个带参数的值,这样写没问题吧!:)
一个变长参数的例子 (参数不固定 源代码)
一个变长参数的例子 (参数不固定 源代码)
有没有简单的不固定参数的存储过程实例?
比如说检索一个表的内容:rnID NAME CAPTIONrn1 A aaaarn2 B bbbbrn3 C ccccrn有时候可能只按NAME筛选rn有时候可能只按CAPTION筛选rn也有可能两个条件都筛选,这个应该怎么写啊?
请教delphi中不固定参数的用法。
vc写的一个dll,里面有一个函数定义类似c的sprintf,rn参数个数不定,比如foo(a,b,c,d,e....),调用foo(a)rn调用foo(a,b,c)都可以。rn在delphi里面要调用这个dll的foo函数,应该如何申明?rn如何调用?rnrnrn请教!
c# 传参
int flag = 0,Num=0,con;rn string sstr = null;rn for(int look=0;look -1) flag = 1; rn if(flag==1) Num++;rn flag = 0;rn rn rn con = Num;rn if (con % 2 != 0) sstr+= "缺少'";rnrn思路rn检测字符数组是否存在单引号rn存在单引号 flag=1并Num++;且将Num传出判断是否偶数倍
API接口防止参数篡改和重放攻击
API重放攻击(Replay Attacks)又称重播攻击、回放攻击。他的原理就是把之前窃听到的数据原封不动的重新发送给接收方。HTTPS并不能防止这种攻击,虽然传输的数据是经过加密的,窃听者无法得到数据的准确定义,但是可以从请求的接收方地址分析出这些数据的作用。比如用户登录请求时攻击者虽然无法窃听密码,但是却可以截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。 所谓重放...
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表