Create one table in your database like below

Insert the entry in this table when you send the link to particular user. As an example, Here I inserted two entries for UserId 10 and 12

Make one procedure or function to validate the token against request.
CREATE PROCEDURE sp_ValidateUserIdAndTokenId
@UserId INT,
@TokenId varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF ISNULL(@UserId,0) <> 0 AND ISNULL(@TokenId,'') <> ''
BEGIN
IF EXISTS(SELECT 1 FROM UserToken WHERE UserID = @UserId AND TokenID = @TokenId)
BEGIN
Declare @TokenInsertedDateTime AS DateTime
Declare @IsTokenExpired AS Bit
SET @TokenInsertedDateTime = (SELECT TokenInserted FROM UserToken WHERE UserID = @UserId AND TokenID = @TokenId)
-- Here Calculate the token time difference in minutes for one day i.e. 1440 minutes.
SET @IsTokenExpired = (SELECT CASE WHEN DATEDIFF(MINUTE, @TokenInsertedDateTime, GETDATE()+1) > 1440 THEN 0 ELSE 1 END)
SELECT @IsTokenExpired
END
END
END
Now, When request comes in controller's action at that time you have to make a call the database to identify the Token and User in newly created table and determine the request is valid or not(You can also calculate the interval of time for particular token).
[HttpGet]
[AllowAnonymous]
public ActionResult Add(int userId, string tokenId)
{
// Determine the request with tokenId and validate your tokenId
// make the database call of created procedure or function and validate your userid and token here.
return View();
}