MVC:为每个用户生成唯一的URL

时间:2014-02-11 14:08:14

标签: asp.net-mvc routing asp.net-mvc-routing asp.net-mvc-5

我想为每个用户创建唯一的网址,以便我可以将该网址发送到他们的电子邮件中,然后根据该网址发布他们的回复。

例如, 让我们假设有一个类型为guid的Id的约会,并且有人(参加者)将参加某些约会。这些与会者也将拥有自己的类型指南ID。

因此,要发布回复,用户将获得一个包含appointmentmentid和他/她的与会者的网址,并且在点击该网址时,如果我有一个控制器,例如如下所示,它会将用户转发给此控制器

   public class ResponseController : Controller
    {

        [HttpGet]
        public AttendeeResponse(Guid appointmentId, Guid attendeeId)
        {
           return View();
        }
   }

我应该如何生成这种网址?

如果我只有一个参数(例如,约会),例如

   public class AppointmentController : Controller
    {

        [HttpGet]
        public Create(Guid appointmentId)
        {
           return View();
        }
   }

这就是url看起来会如何将我转发到控制器上面的方法

http://localhost:14834/Appointment/Create?appointmentId=e2fd8b29-2769-406a-b03d-203f9675edde

但是,如果我必须自己创建两个参数的唯一网址,我该怎么做?

1 个答案:

答案 0 :(得分:1)

要在网址中添加更多参数,您可以使用url字符分隔&上的参数,以获取示例:

http://localhost:14834/Appointment/Create?appointmentId=e2fd8b29-2769-406a-b03d-203f9675edde&attendeeId=e2fd8b29-2769-406a-b03d-203f9675edde

asp.net mvc会在你行动的Guid个对象上为你绑定它。

代码示例:

public static string CreateUrl(Guid appointmentId, Guid attendeeId)
{
    return string.Format("http://yourdomain.com/Response/AttendeeResponse?appointmentId={0}&attendeeId={1}", appointmentId.ToString(), attendeeId.ToString());
}

由于你有guids对象,你可以使用这个方法,对于样本:

string url = CreateUrl(appointmentGuid, attendeeguid);

另一种解决方案

无论如何,你有任何地方存储约会吗?我的意思是,数据库中的一个表用于样本。

也许你可以做这些步骤:

  1. 您可以为appointmentId生成一个Guid,为attendeeId生成另一个Guid。
  2. 将其存储在数据库中以供将来访问。
  3. 将带有appointmentId的网址发送给用户的电子邮件。
  4. 当用户点击网址时,您可以在数据库中读取相应attendeeId的{​​{1}}内容。