The segment events is in all routes, logically it can be removed or put in front. Also you should add an ApiController 'EventsController' to service the requests instead of this page thingy it can then structure calls to your EventsListing.aspx if you like.
Actually it looks like you only ultimately have one route, but even better than suggestion below is if you consider using different actions on that controller with implicit defaults (meaning instead of having a parameter with a default on the route just don't have that part of the route and implement the default in the action.
RouteTable.Routes.MapHttpRoute(
name: "omnirout",
routeTemplate: "events/{city}/{zone}/{locality}/{category}/{pricerange}/{evententry}/{propertytype}",
defaults: new { controller = "Events", action = "GetEvents", city = "all", zone = "all", locality = "all", category = "all", pricerange="all", evententry = "all", propertytype = "all" }
);
maybe more intuitive is to omit the defaults and have more, remember that the routes are evaluated sequentially and you can use your route with defaults as the fallthrough catchall
RouteTable.Routes.MapHttpRoute(
name: "allevents-in-city-zone-route",
routeTemplate: "events/{city}/{zone}",
defaults: new { controller = "Events", action = "GetAllEventsInCityZone"}
);
RouteTable.Routes.MapHttpRoute(
name: "allevents-in-city-route",
routeTemplate: "events/{city}",
defaults: new { controller = "Events", action = "GetAllEventsInCity" }
);
RouteTable.Routes.MapHttpRoute(
name: "allevents-route",
routeTemplate: "events",
defaults: new { controller = "Events", action = "GetAllEvents" }
);
RouteTable.Routes.MapHttpRoute(
name: "omnirout",
routeTemplate: "events/{city}/{zone}/{locality}/{category}/{pricerange}/{evententry}/{propertytype}",
defaults: new { controller = "Events", action = "GetEvents", city = "all", zone = "all", locality = "all", category = "all", pricerange="all", evententry = "all", propertytype = "all" }
);