docs: def match(self, request, service):
  		""" Check this route for matching the given request. If this route is matched, then target route is
  		returned.
  
  		:param request: request to match
  		:param service: source service
  		:return: WWebTargetRoute or None
  		"""
  		uri = self.normalize_uri(request.path())
  
  		if request.session().protocol() not in self.protocols:
  			return
  
  		if request.method() not in self.methods:
  			return
  
  		if self.virtual_hosts and request.virtual_host() not in self.virtual_hosts:
  			return
  
  		if self.ports and int(request.session().server_address().port()) not in self.ports:
  			return
  
  		match_obj = self.re_pattern.match(uri)
  
  		if not match_obj:
  			return
  
  		presenter_action = self.action
  		presenter_args = self.presenter_args.copy()
  
  		for i in range(len(self.route_args)):
  			if self.route_args[i] == 'action':
  				presenter_action = match_obj.group(i + 1)
  			else:
  				presenter_args[self.route_args[i]] = match_obj.group(i + 1)
  
  		return WWebTargetRoute(self.presenter, presenter_action, self, service.route_map(), **presenter_args)