C# 带有16位guid的路由看起来很疯狂?

C# 带有16位guid的路由看起来很疯狂?,c#,asp.net,asp.net-mvc,database-design,asp.net-mvc-2,C#,Asp.net,Asp.net Mvc,Database Design,Asp.net Mvc 2,我刚刚从DBA查看了我的数据库模式,并使用16位唯一标识符作为主键。我的问题是如何在MVC路由中使用它 差不多 这是一个中型企业应用程序,为什么我们的表还需要GUID 我知道我们可以创建一个友好的ID字段,但我知道MVC Routing不建议在Routes中使用数据库ID 所以我想我的问题是: 为什么我们需要16位guid作为主键 我怎么能在路线上使用它呢。路由不应该包含和数据库ID。让我们以这个页面为例。我想我们都同意StackOverflow是一个成功的MVC应用程序 https://sta

我刚刚从DBA查看了我的数据库模式,并使用16位唯一标识符作为主键。我的问题是如何在MVC路由中使用它

差不多

这是一个中型企业应用程序,为什么我们的表还需要GUID

我知道我们可以创建一个友好的ID字段,但我知道MVC Routing不建议在Routes中使用数据库ID

所以我想我的问题是:

为什么我们需要16位guid作为主键


我怎么能在路线上使用它呢。路由不应该包含和数据库ID。

让我们以这个页面为例。我想我们都同意StackOverflow是一个成功的MVC应用程序

https://stackoverflow.com/questions/4079861/routes-with-16-bit-guids-seem-crazy
里面的“4079861”是什么?数据库ID

请注意,数据库ID实际上是唯一重要的部分,因为这些链接也到达相同的位置:

https://stackoverflow.com/questions/4079861/

https://stackoverflow.com/questions/4079861/Foo

所以,简单的回答是:是的,你的路线可能会有一个很大的丑陋的Guid。如果您对此有问题,请与DBA联系。

关于问题的DB部分

要使用哪种DB键的决定应该完全独立于MVC路由。DBA可能会选择使用他们认为适合您的应用程序的任何值,而不必担心您将如何设计路由。我不知道它们对你的领域是否有意义

关于问题的路由/URL部分

根据您试图执行的操作,将GUID添加到路由可能不是路由/URL的最佳方案。《ASP.NET MVC在行动》(第95页)的作者就URL的设置给出了一些很好的指导原则:

  • 简洁
  • 可黑客
  • 允许URL参数冲突
  • 尽可能避免暴露数据库ID
  • 考虑添加不必要的信息
如果您将guid作为数据库id,请查看是否可以使用另一个值来创建到每个资源/记录的路由。例如,产品名称加上db ID的最后4位数字,或者根据您试图访问的信息,您可以得出的另一个唯一且用户友好的(请参见指南)值。

您应该问自己:是否有其他方法唯一标识我的[插入名称]

@Mark给出了StackOverflow示例。好的方面是它是一个数字,即使它是一个长的。数字比guid好

您的选择可能是:

  • 在数据库中创建一个简单的数字到GUID的映射,创建一个冗余的唯一标识符,用于路由目的
  • 实际显示GUID作为路由的一部分
  • 找到一些其他方法,您可以唯一地标识您的记录(即博客使用的日期+名称组合),尽管在这里您必须确保不允许重复输入路由标识符

您最终使用什么将完全取决于您的情况和要求。

您发布的链接是404。他确实说了“类似”XSaint32,这是一个例子……为什么路由不应该包含数据库ID?(也就是说,上面的“4079861”也是如此)也不可能以16位存储GUID。(它们是128位)guid是128位。16位是非常小的整数。我是说字节!!!!16字节(128位)数字我认为这里的问题更容易破解。不像MVC在动作状态下那样具有良好的黑客能力,但是具有糟糕的黑客能力,例如可能使用URL访问不应该访问的内容。在这种情况下,向URL添加额外的信息可能是一个好主意。但是,请记住,仅仅依靠URL的安全性是不够的。即使使用GUID,如果URL不应为公共的,也必须使用其他安全方法。