请问Query.QueryString没有?或者&可能?

时间:2012-01-15 20:52:24

标签: c# asp.net url-rewriting

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

我想这样:

http://www.colors.com/Red

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

而不是以下:

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

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

3 个答案:

答案 0 :(得分:3)

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

您提供的示例会将用户重定向到目录。

答案 1 :(得分:1)

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

在最简单的形式中,您需要调用HttpContext的Rewrite方法,该方法将在内部启动一个新请求,执行与该url匹配的代码,而无需用户注意任何内容。有一点需要注意的是,您的遗留代码不知道如何在菜单和内容中呈现正确的链接,因此您可以继续使用?ColorID=Red这样的网址,它应该只是Red。< / p>

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

现在,路由是另一回事。它是一个Asp.net功能,并不在现有的遗留代码之上工作,但需要与它一起使用。这意味着执行代码需要知道请求被路由到它。这当然有许多好处,而且你正在编写一个新系统,然后我明确建议使用路由而不是重写。关于差异有一个good article here,一些SO问题也涵盖了这个主题:

答案 2 :(得分:-1)

听起来您可能想要实施MVC网站。

请查看this MSDN documentation了解详情。