This repository was archived by the owner on Jul 2, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 609
Expand file tree
/
Copy pathXCallbackQuery.cs
More file actions
53 lines (47 loc) · 1.89 KB
/
XCallbackQuery.cs
File metadata and controls
53 lines (47 loc) · 1.89 KB
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
50
51
52
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace CodeHub.iOS.XCallback
{
public class XCallbackQuery
{
public string SuccessUrl { get; private set; }
public string ErrorUrl { get; private set; }
public string CancelUrl { get; private set; }
public string Url { get; private set; }
public IDictionary<string, string> Parameters { get; private set; }
public XCallbackQuery(string urlString)
{
var uri = new Uri(urlString);
Url = uri.AbsolutePath;
Parameters = new Dictionary<string, string>();
var query = System.Web.HttpUtility.ParseQueryString(uri.Query);
foreach (string key in query.Keys)
{
if (key == null)
continue;
if (string.Equals("x-success", key, StringComparison.OrdinalIgnoreCase))
SuccessUrl = query[key];
else if (string.Equals("x-error", key, StringComparison.OrdinalIgnoreCase))
ErrorUrl = query[key];
else if (string.Equals("x-cancel", key, StringComparison.OrdinalIgnoreCase))
CancelUrl = query[key];
else
Parameters.Add(key, query[key]);
}
}
public string ExpandErrorUrl(int errorCode, string errorMessage)
{
return string.Format(ErrorUrl + "?errorCode={0}&errorMessage={1}", errorCode.ToString(), Uri.EscapeDataString(errorMessage));
}
public string ExpandSuccessUrl(IDictionary<string, string> parameters)
{
var sb = new StringBuilder();
sb.Append(SuccessUrl);
sb.Append("?");
sb.Append(string.Join("&", parameters.Select(x => x.Key + "=" + Uri.EscapeDataString(x.Value))));
return sb.ToString();
}
}
}