【问题标题】:Is Request.QueryString without ? or & possible?Request.QueryString 没有吗?或 & 可能?
【发布时间】:2012-02-10 23:56:32
【问题描述】:

是否可以在不使用的情况下获取 QueryString 值?还是 & 在网址中?

我想要这样:

http://www.colors.com/Red

string id = Request.QueryString["?"];

而不是跟随:

http://www.colors.com/?ColorID=Red

string id = Request.QueryString["ColorID"];

【问题讨论】:

标签: c# asp.net url-rewriting


【解决方案1】:

如果你希望仍然能够通过 Querystring 访问 color-id 的值,那么你应该看看 Rewriting。这可能是由于您无法更改的遗留代码或与第 3 方代码交互的其他形式。 Rewriting 的好处是最终被执行的代码在重写之前不知道 url 的样子,它可以像有一个名为 ColorID 的 Querystring 参数一样继续工作。

在其最简单的形式中,您需要调用 HttpContext 的 Rewrite 方法,该方法将在内部启动一个新请求,该请求执行与该 url 匹配的代码,而用户不会注意到任何事情。对此的一个警告可能是,您的旧代码不知道如何在菜单和其他内容中呈现正确的链接,因此您将继续拥有像 ?ColorID=Red 这样的网址,而它应该只是 Red

在 IIS 7 及更高版本中,有一个内置过滤器,您可以在其中编写规则和模式,因此您无需编写自己的代码来匹配传入请求和调用 HttpContext.Rewrite。在 MSDN 上阅读更多信息 here

现在,路由完全是另一回事了。它是一个 Asp.net 功能,不能在现有遗留代码之上工作,但需要与它一起使用。这意味着执行代码需要知道请求已路由到它。这当然有很多好处,如果你正在编写一个新系统,那么我肯定会推荐使用 Routing 而不是 Rewriting。有一个关于差异的good article here,一些 SO 问题也涵盖了该主题:

【讨论】:

    【解决方案2】:

    听起来你可能想要实现一个 MVC 网站。

    查看this MSDN documentation 了解更多信息。

    【讨论】:

    • MVC 与此类 url 的构造无关。它真正的MVC是以它为中心的,但这并不意味着这个概念本身就完全属于MVC。
    • OP 没有询问 URL 的 construction,他们询问的是 accessing URL。假设他们希望使用所示表单中的 URL 格式,以便将参数值传递给 Web 应用程序。有了这组信息,MVC 是一个完全有效的建议,根据这个问题,我认为 OP 对此一无所知。
    • @PauliØsterø 是正确的。您可以使用 routes.MapPageRoute 为 OP 在“plain old ASP.NET”中显示的模式创建路由。它与 MVC 无关。
    • 是的,但我完全看不出这是一个无效的答案。是的,您可以在普通的旧 ASP.Net 中执行此操作,但您也可以在 MVC 中执行此操作。这个建议到底有什么问题?
    • MVC 的呈现方式让人觉得它是首选或唯一的解决方案,仅此而已。路由适用于所有 ASP.NET 类型的应用程序框架。
    【解决方案3】:

    没有。查询字符串由? 的外观定义。

    您给出的示例会将用户重定向到目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 2019-03-21
      • 1970-01-01
      • 2023-03-19
      • 2019-03-17
      • 2010-10-17
      • 2017-04-14
      相关资源
      最近更新 更多