Asp.net 数据库信息的自定义URL

Asp.net 数据库信息的自定义URL,asp.net,Asp.net,像谷歌教室这样的东西是如何做到这一点的: com/c/(此处为随机字符) 当您转到该链接时,由于随机字符,它知道要显示哪些信息 在asp.net中,我将如何做类似的事情呢?嗯,在.net中,您可能经常会有网格或选择列表,例如酒店。当用户单击该列表中的酒店时,您可以跳转/导航到该酒店并显示信息。在这些情况下,您实际上希望避免在URL中使用参数。因此,可以使用session()将值传递给新的web表单/页面 但是,通常您可能想说给其他人发送一个链接,或者说发送一封包含以下链接的电子邮件: 点击此处查

像谷歌教室这样的东西是如何做到这一点的: com/c/(此处为随机字符)

当您转到该链接时,由于随机字符,它知道要显示哪些信息
在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:

        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.

因此,上面的链接现在可以发送给用户。 他们单击上面的按钮,页面加载中的代码将执行以下操作:

 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,可以显示数据记录

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

同样,代码现在只需使用ID 343,并从ID=343的数据库表中提取酒店信息。这个想法只有在你不需要安全的情况下才有效。比如说一个城市的天气。但您不能也不希望像上面那样使用实际的数据库ID,因为这样用户就可以输入任何数字,而不仅仅是上面示例中的343

事实上,在互联网发展的早期,显然有一家信用卡公司使用带有客户号码的身份证。如果你输入了其他人的客户号码,那么你可以看到他们的信息!!!因此,使用参数并不适用于所有情况。当然,对于公共数据来说,它工作得很好,也很有意义。如果更改URL中天气的城市参数,则不会造成任何伤害

所以,这就是为什么经常使用GUID或一些几乎不可能猜到的数字。现在谈谈城市的天气?好吧,那没关系,整个想法就是让用户在任何地方都能看到天气。但对于敏感数据?那么你需要GUID

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

那么,在很多情况下?我认为URL中的参数非常难看和混乱。但是,对于非常大规模的网站,他们通常使用URL中的参数,因为这样一来,他们的服务器端代码就不必占用内存和资源来保存/保留/保留session()数据。但使用session()则可以跳转并使用URL,而无需难看的参数。因此,在.net中,我们通常避免使用参数,但在某些情况下,URL中的参数是需要的,因为您可以发送/共享该链接。所以说“点击这里”来查看您的订单?当然,链接中也可以使用GUID。但即使如此,一旦第一个页面被GUID(以及上面的安全性)命中,那么查看订单相关内容的任何其他页面实际上都不需要参数

因此,参数很容易,经常使用,它们减少了服务器端软件的负载,如上所示,大多数web开发语言都有一种“现成的”简单方法来获取/获取/使用URL中的参数。然而,如前所述,除非你在构建下一个谷歌,或者说你需要向客户发送一个“链接”以允许跳转到特定的订单?那么,在.net中,我们倾向于避免使用参数,因为我们在大多数情况下都不需要这些参数,.net有很多非常酷的方法来存储/保存值,并将它们从一个web表单传递到下一个web表单,而不必使用参数


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

这些随机字符可能是ID或。web应用程序读取URL并获取ID或slug,并使用它从后端(数据库或其他服务)检索适当的信息。如何在ASP.NET中实现这一点取决于您选择的框架(Web表单、MVC、Razor页面等)。通常这个概念叫做“路由”。天哪,非常感谢!这解释了一切!