Calculate expiration date based on server data
General naming guidelines suggest that an async method should end its name with "Async", so the method name should be RevalidateAccountAsync.

Some would argue that a underscore prefix should never be used for naming of any variables.  For those that do allow underscore prefixes, it should only be for class-level variables and never used for variables local to a given method.

When comparing or manipulating 2 DateTime objects, the proper way to do that is to be sure that both have the same Kind.  Oddly enough, your code does that since you jump through so many hoops to create new DateTime objects with Kind of Unspecified.

expirationDate is a misleading name since it is not a date.  It is a TimeSpan.

After checking expirationDate.Days &lt;= 7, there is no need to check IsVisibleValidateText since it will always be true at that point.

Your code looks to be twice as long as it needs to be because of all the manipulation of DateTime and string.  For example, to get today's date should only be 1 line:

DateTime todayDate = DateTime.Today; \\Kind is Local

expDate could use DateTime.Parse or Convert.ToDateTime.  However, you should also set it's Kind because as it is it will be Unspecified unless the string contains any time zone offset.  Example setting it to Local:

DateTime expDate = DateTime.SpecifyKind(Convert.ToDateTime(_expDateFromPersistent), DateTimeKind.Local);

The alternative would be to keep expDate as Unspecified but then make todayDate also Unspecified.

DateTime todayDate = DateTime.SpecifyKind(DateTime.Today, DateTimeKind.Unspecified);

Since it looks like you are interested in dates starting a midnight, skip the slower string manipulation and instead use the DateTime.Date property.  See help at this link.  Example:

TimeSpan expirationDate = expDate.Date - todayDate;

Which gets rid of all the slower and unneeded string variables, both dates above have the same Kind, and both are set to midnight.