如何将DateTime.Ticks作为URI参数传递?

时间:2017-03-05 12:31:46

标签: c# asp.net-mvc datetime

如何让此代码正常工作?

public ActionResult ABC(DateTime.Now.Ticks Id)
{
 //some stuff
 return View();
}

你的想法?

修改 整个概念为每个访问者/用户提供了唯一的URL。

1 个答案:

答案 0 :(得分:4)

首先,基础知识:在声明方法时,您需要指定参数的类型,在本例中为long

public ActionResult Abc(long id)
{
    // ...
}

当您调用时(无论是内部还是响应网址,例如在Javascript中生成),您可以选择使用DateTime.Now.Ticks作为参数,就像在应用程序中调用这样的方法一样:

Foo.Abc(DateTime.Now.Ticks);

然而有些警告:

  • 无法保证呼叫者 将其用作参数
  • 即使他们这样做了,也会是系统本地时区的当前时间,这几乎肯定是一个坏主意
  • 如果您尝试使用多个刻度作为ID,那也是一个坏主意:
    • DateTime.UtcNow.Ticks在快速连续调用时会多次返回相同的值
    • 多台机器无论如何都可以同时调用该方法

如果您的想法是生成唯一ID,我可能会使用Guid.NewGuid() ...或者您的存储层提供的任何内容来生成唯一ID。即使在机器上保持内部的,原子递增的计数器也存在水平缩放的问题。有时使用high-low ID generation strategy来解决这个问题。