【问题标题】:Are Querystrings in .NET Good Practice?.NET 中的查询字符串是良好做法吗?
【发布时间】:2010-08-23 03:02:34
【问题描述】:

我正在开发一个具有数据库后端的网络应用程序。在过去,我做过类似的事情: http://page.com/view.aspx?userid=123查看用户123的个人资料;使用查询字符串。

使用查询字符串是否被认为是一种好习惯?还有什么我应该做的吗?

我正在使用 C# 4.0 和 ASP.net。

【问题讨论】:

    标签: c# asp.net query-string


    【解决方案1】:

    您的问题并不是真正的 .NET 问题...这是每个 Web 框架和 Web 开发人员都以某种方式处理的问题。

    大多数人都同意,对于您网站的主要面向用户的部分,您应该避免使用长查询字符串,而应使用对网站访问者“有意义”的 url 结构。尝试使用逻辑层次结构,当访问者阅读它时,他们很有可能推断出他们在网站上的位置。在几个区域点击 StackOverflow,看看他们对 url 做了什么。你通常很清楚你在看什么以及你在哪里。

    其他一些注意事项...虽然很多数据库查找都是使用主键完成的,但在您的 url 中提供用户友好的资源名称而不只是主键也是一个好主意。您会看到 StackOverflow 在当前地址中这样做,他们正在使用主键“3544483”进行查找,但还包括一个 SEO/用户友好的 url 参数“are-querystrings-in-net-good-practice”。如果有人通过电子邮件向您发送该链接,您就会很清楚您将要打开什么。

    我不太确定 WebForms 如何处理 URL 路由,但如果您难以掌握这些概念,请阅读 MVC NerdDinner 教程。它们涵盖了一些可以提供帮助的基本 url 路由。

    【讨论】:

      【解决方案2】:

      如果您确定要锁定人们要查看的内容,则查询字符串非常好。您应该检查有效值(数字,非空等),并且如果您的应用程序具有安全性,是否访客有权查看用户 1245 的个人资料..

      您可以查看 Session 和 ViewState,但 QueryString 似乎是您所追求的。

      【讨论】:

        【解决方案3】:

        如果可能的话,我认为应该避免这种做法,尤其是当您以纯文本形式传递自动递增的 id 时。在我看来,您几乎是在戏弄用户来操作查询字符串值,看看他们是否可以访问其他人的个人资料。即使采取了适当的安全措施(在呈现页面之前验证服务器端的请求),我仍然建议在这种特殊情况下加密查询字符串参数。

        【讨论】:

          【解决方案4】:

          我认为使用查询字符串非常好,但有必要为hackable URLs 提供一个案例,因为它们更容易被高级用户理解并且对 SEO 友好。例如,我碰巧认为http://www.example.com/user/view/1234 看起来比http://www.example.com/view.aspx?user=1234 更直观。

          如果您使用的是 IIS 7.0,则无需更改应用程序即可使用漂亮的 URL。 URL Rewrite Module 和一些重写规则应该足够了。

          【讨论】:

          • URL 重写模块看起来很棒。你以前用过吗?
          • 是的,我用过几次。它得到了微软的全面支持,除了需要了解正则表达式之外,您无需担心使用它。
          【解决方案5】:

          要清楚地回答您的问题:是的,这不是一个好习惯。事实上,这是一个网站的预期行为。

          我完全同意 ShaderOp,您应该使用 url 重写器来获得一个漂亮的锁定 url。事实上,我假设您会进行一些验证,以避免有人操纵 url 并访问他们不应该得到的数据。

          【讨论】:

            【解决方案6】:

            查询字符串没问题,但不要损害它们的安全性。

            如果您正在访问的个人资料是当前登录的用户,则无需发送 uid。只需转到 /profile 并加载当前登录的用户信息。

            如果您正在查看其他会员资料,我建议您使用它的“用户名”、加密的 id 或 Guid。

            向客户公开用户 ID 通常不是一个好主意。

            【讨论】:

              猜你喜欢
              • 2011-12-17
              • 2021-01-10
              • 2017-02-02
              • 1970-01-01
              • 1970-01-01
              • 2019-11-29
              • 2016-09-09
              • 1970-01-01
              • 2013-09-04
              相关资源
              最近更新 更多