首页 > 解决方案 > 数据库信息的自定义 URL

问题描述

谷歌教室之类的东西是如何做到的:classroom.google.com/c/(这里是随机字符)

当您转到该链接时,由于随机字符,它知道要显示哪些信息我将如何在 asp.net 中执行类似的操作

标签: asp.net

解决方案


好吧,在 .net 中,您通常可能有网格或选择酒店的列表。当用户单击该列表中的酒店时,您可以跳转/导航到酒店并显示信息。在这些情况下,您实际上希望避免在 URL 中使用参数。因此,您可以使用 session() 将值传递给新的 Web 表单/页面。

但是,通常您可能想说通过电子邮件将链接发送给其他人,或者说发送带有以下链接的电子邮件:

点击此处查看您的酒店预订详情。

那么对于上面呢?通常做的是在数据库中创建一个表。我经常称它为 tblHotelJump 之类的。在该表中,您有以下内容:

ID: (standard PK value all tables have).
CusotmerID: the PK of the customer - you might not need this, but if you using logons
            and security - then you might only want the the link to work for the given
            user.
HotelID: - PK value of hotel. This is where you can now pull the Hotel information
           from the hotel table. (or maybe the booking table ID
JumpGUID:  {3434sl%$#*}  - a random generated number or GUID is often used.
userLogonID: internal user logon ID - obtained from logon authentication system.

所以,现在,我们可以像这样传递一个 URL:

www.MyBookings.com/HotelInformation.aspx?JID={3434sl%$#*}

所以上面现在是您可以发送给用户的链接。他们点击上方,页面加载后面的代码执行以下操作:

 If Not IsPostBack Then

        ' get parms
        Dim strGuid As String
        strGuid = Request.QueryString("JID")

所以上面获取/获取该参数。现在,您的代码从 tblHotelsJump 中提取这一行,如下所示:

        Dim cmdSQL As New SqlCommand("SELECT * from tblHotelJump 
                    where JumpGUID = @GUID ORDER BY WhenTime DESC", GetCon())
        cmdSQL.Parameters.Add("@GUID", SqlDbType.NVarChar).Value = strGuid
        Dim rstGUID As DataTable = MyrstP(cmdSQL)

        If rstGUID.Rows.Count > 0 Then
            ' Ok, valid jump row, get Hotel information and display it.

所以现在我们可以显示酒店信息,因为我们有 HotelID 并且可以显示该数据记录。

现在在某些情况下,您可能会看到如下内容:

www.MyBookings.com/ShowHotel.aspx?ID=343

再次,代码现在将简单地使用 ID 343 并从 ID = 343 的数据库表中提取该酒店信息。这个想法仅在您不需要安全性时才有效。所以,说一个城市的天气。但是您不能也不想使用上面的实际数据库 ID,因为用户可以输入任何数字,而不仅仅是上面示例中的 343

事实上,在互联网的早期,信用卡公司显然使用带有客户编号的 ID。如果你输入别人的客户号码,那么你可以看到他们的信息!!!所以使用参数并不适用于所有情况。对于公共数据,当然,它运作良好且有意义。如果您更改天气 URL 中的 city 参数,则不会造成任何伤害。

因此,这就是为什么经常使用 GUID 或一些几乎不可能猜测的数字的原因。现在是一个城市的天气?好吧,那没关系,整个想法是允许用户获取/查看任何位置的天气。但是对于敏感数据呢?然后你需要 GUID。

除上述之外,在那个“跳转表”中,我还包含了用户 ID,因此我不会显示该网页,除非: 用户已登录(因此页面受有效登录保护)。我从该跳转表中提取的酒店信息也与用户登录 ID 匹配。

那么,在很多情况下呢?我认为 URL 中的参数非常丑陋和混乱。但是,对于非常大型的网站,他们经常使用 URL 中的参数,因为那时他们的服务器端代码不必消耗内存和资源来保存/保留/保留 session() 数据。但是使用 session() 然后你可以跳来跳去使用没有丑陋参数的 URL。所以在 .net 中我们经常避免使用参数,但在某些情况下 URL 中的参数是需要的,因为那时您可以发送/共享该链接。所以说“点击这里”查看您的订单?那么可以肯定的是,很可能会使用链接中的 GUID。但即便如此,一旦第一个页面被 GUID(连同上述安全性)击中,那么任何用于查看订单内容的其他页面实际上都不需要参数。

所以参数很容易,经常使用,它们减少了服务器端软件的负载,如上所示,大多数 Web 开发语言都有一种“现成”的简单方法来获取/获取/使用 URL 中的参数。但是,如上所述,除非您构建下一个 google,或者说您需要向客户发送“链接”以允许跳转到特定订单?那么在 .net 中,我们倾向于避免使用参数,因为我们大部分时间都不需要它们,而且 .net 有一大堆非常酷的其他方式来存储/保留值并将它们从一个 Web 表单传递到下一个 Web无需使用参数的形式。

但是,如果您使用有限的 Web 脚本语言,那么在 URL 中使用 parms 通常是您唯一实际的选择。


推荐阅读