我正在开发一个REST服务,所以请求可能是这样的:
/数据/主/表=客户/
我需要逐个获取段,并且对于每个段,我将决定我将要使用的对象,在我将查询的其余部分传递给该对象之后,它可以决定下一步做什么.基本上,REST查询是树上的路径:P
这意味着很多String操作(取决于查询复杂性),但StringBuilder仅用于连接和删除,您不能使用IndexOf或类似的搜索执行.
我已经开发了这个满足我要求的类,但问题是操作字符串,所以每次我得到一个段......我会创建额外的字符串,因为String是一个不可变的数据类型:
public class RESTQueryParser
{
String _query;
public RESTQueryParser(String query)
{
_query = query;
}
public String GetNext()
{
String result = String.Empty;
Int32 startPosition = _query.StartsWith("/", StringComparison.InvariantCultureIgnoreCase) ? 1 : 0;
Int32 i = _query.IndexOf("/", startPosition, StringComparison.InvariantCultureIgnoreCase) - 1;
if (!String.IsNullOrEmpty(_query))
{
if (i < 0)
{
result = _query.Substring(startPosition, _query.Length - 1);
_query = String.Empty;
}
else
{
result = _query.Substring(startPosition, i);
_query = _query.Remove(0, i + 1);
}
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
服务器应该支持很多调用,查询可能很大,所以这将是一个非常重复的任务.我真的不知道对内存和性能的影响有多大,我只是在一些书中对它进行了研究.
我应该实现一个管理Char []的类而不是字符串并实现我想要的方法吗?或者应该对这个好吗?正则表达式可能?
更新:
上面的类只是一个小的aproximation,我还在研究它,我必须解析更复杂的模式.
我无法使用WCF REST或预定义路径(例如将正则表达式映射到特定方法),因为用户可以在运行时更改查询格式.所以必须逐步解析.
我不能使用String.Split,因为例如查询可能是:"Data/Search = '01/01/2008'/ Whatever".
除非你反对使用它.我会在这里查看
http://msdn.microsoft.com/en-us/netframework/cc950529.aspx
WCF为您处理REST实现.无需解析URL.
如果您必须手动解析查询,我会使用
string[] queryParts = query.Trim('/').Split('/');
Run Code Online (Sandbox Code Playgroud)
您可以单独浏览每个部分,而无需使用IndexOf.
String.Split方法:http: //msdn.microsoft.com/en-us/library/system.string.split.aspx
如果您不打算使用WCF并且它是REST实现,那么您要做的是将您的变量信息放在查询字符串参数中
/Data/Main/Table=Customers/
Run Code Online (Sandbox Code Playgroud)
真的需要:
/Data/Main?Table=Customers
Run Code Online (Sandbox Code Playgroud)
要么
/Data/Main/Table/Customers
Run Code Online (Sandbox Code Playgroud)
您将需要一种方法将路径路径与查询变量分开.复杂性需要是查询字符串的一部分,而不是基本URI的一部分.然后你可以把变量分开出去?并通过拆分&来分离出每个查询表达式.
string[] uriAndQueryItems = query.Split('?');
if(uriAndQueryItems.Length > 1)
{
foreach(string queryItem in uriAndQueryItems.Split('&'))
{
//do something here.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |