protected virtual string GetCalendarObjectUrl(string id, string uid) { if (string.IsNullOrEmpty(id)) { return("/" + OBJECT_ROUTE.Replace("{uid}", Uri.EscapeDataString(uid))); } return("/" + CALENDAR_OBJECT_ROUTE.Replace("{id}", Uri.EscapeDataString(id)).Replace("{uid}", Uri.EscapeDataString(uid))); }
public static void RegisterRoutes <T>( RouteCollection routes, string routePrefix = "caldav", Boolean useCalendarPrefix = true, bool disallowMakeCalendar = false, bool requireAuthentication = false, string basicAuthenticationRealm = null) where T : CalDavController { var caldavControllerType = typeof(T); var namespaces = new[] { caldavControllerType.Namespace }; var controller = caldavControllerType.Name; if (caldavControllerType.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)) { controller = caldavControllerType.Name.Substring(0, caldavControllerType.Name.Length - "controller".Length); } var defaults = new { controller, action = "index" }; MapFirst(routes, "CalDav Root", string.Empty, new { controller, action = "PropFind" }, namespaces, new { httpMethod = new Method("PROPFIND") }); MapFirst(routes, "CalDav", BASE = routePrefix, defaults, namespaces); MapFirst( routes, "CalDav User", USER_ROUTE = routePrefix + "/user/{id}/", new { controller, action = "userRoot" }, namespaces); var calendarRoute = useCalendarPrefix ? "/calendar" : ""; MapFirst(routes, "CalDav Calendar", CALENDAR_ROUTE = routePrefix + calendarRoute + "/{id}/", defaults, namespaces); //Added to support options called root of the caldav. MapFirst( routes, "CalDav Calendar options home", routePrefix + calendarRoute + "/", new { controller, action = "indexRoot" }, namespaces ); MapFirst(routes, "CalDav Object", OBJECT_ROUTE = routePrefix + "/{uid}.ics", defaults, namespaces); MapFirst(routes, "CalDav Calendar Object", CALENDAR_OBJECT_ROUTE = routePrefix + calendarRoute + "/{id}/{uid}.ics", defaults, namespaces); OBJECT_ROUTE = OBJECT_ROUTE.TrimStart('/'); CALENDAR_OBJECT_ROUTE = CALENDAR_OBJECT_ROUTE.TrimStart('/'); rxObjectRoute = new Regex(routePrefix + calendarRoute + "(/(?<id>[^/]+))?/(?<uid>.+?).ics", RegexOptions.Compiled | RegexOptions.IgnoreCase); RequireAuthentication = requireAuthentication; BasicAuthenticationRealm = basicAuthenticationRealm; DisallowMakeCalendar = disallowMakeCalendar; }