カンマ文字列は次のC#は、例えば、それを行うだろう。..正規表現によって分割する必要はありません区切ら:
string sort = Request["sortBy"];
if(sort != null){
foreach(string s in sort.Split(',')){
string direction = "DESC";
if(s[0] == '-')
direction = "ASC";
if(permittedColumnsList.Contains(s.Replace("-", ""))
sql = sql + s.Replace("-", "") + " " + direction + ",";
}
sql = sql.Remove(sql.Length - 1); // drop last comma
これはまだ、しかし解析して最初のダッシュを探していますあなたが欲しくないようなもの。
あなたはそれを見て単純になる辞書にすべての許容ソートOPSを格納するために用意した場合:
//column dictionary mapping acceptable parameters to the sql that
//implements them
colDict["-id"]="id ASC,";
colDict["id"]="id DESC,";
colDict["-name"]="name ASC,";
colDict["name"]="name DESC,";
string sort = Request["sortBy"];
if(sort != null){
foreach(string s in sort.Split(',')){
if(colDict.ContainsKey(s))
sql = sql + colDict[s];
}
sql = sql.Remove(sql.Length - 1); // drop last comma
私はこれまでのところ、あなたは物事を単純化するために探しに行くべき存在だと思います。ユーザーがURLに入力したものを盲目的に奪取するのは賢明ではないでしょうし、セキュリティリスクのために - (私が思うにはDESCであると思っています)ASCの後ろに付いているSQLにそれを押し込みます。許可された値の辞書を作成することによって、あなたはそのリスクから自分自身を分離します。辞書はプログラムで構築できるため、クエリスキーマが変更されるたびに手動で変更する必要はありません