コード例 #1
0
ファイル: Uri.cs プロジェクト: Opportunity-Holding/RESTar
        internal static URI ParseInternal(string uriString, bool percentCharsEscaped, Context context,
                                          out CachedProtocolProvider cachedProtocolProvider)
        {
            var uri = new URI();

            if (percentCharsEscaped)
            {
                uriString = uriString.Replace("%25", "%");
            }
            var groups         = Regex.Match(uriString, RegEx.Protocol).Groups;
            var protocolString = groups["proto"].Value;

            if (protocolString.StartsWith("-"))
            {
                protocolString = protocolString.Substring(1);
            }
            var tail = groups["tail"].Value;

            if (!ProtocolController.ProtocolProviders.TryGetValue(protocolString, out cachedProtocolProvider))
            {
                uri.Error = new UnknownProtocol(protocolString);
                return(uri);
            }
            uri.ProtocolProvider = cachedProtocolProvider.ProtocolProvider;
            try
            {
                uri.Populate(cachedProtocolProvider.ProtocolProvider.GetUriComponents(tail, context));
            }
            catch (Exception e)
            {
                uri.Error = e;
            }
            return(uri);
        }