2012-01-15 49 views
2

是否有可能不使用QueryString值?或&在网址?Request.QueryString没有?或可能?

我想有这样的:

http://www.colors.com/Red 

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

以下代替:

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

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

你的意思是URL重写,有多种方法可以做到这一点,这里是另一篇文章上问题:http://stackoverflow.com/questions/2375256/url-rewriting-in-net-mvc – 2012-01-15 20:54:22

+2

URL路由http://msdn.microsoft.com/en-us/library/cc668201.aspx – 2012-01-15 20:55:16

+0

请注意' URL重写“和”URL路由“是两个不同的东西,最终完成相同的总体目标。他们的经营方式存在细微的差异,这对您而言可能并非重要。 – 2012-01-15 20:58:33

回答

3

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

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

-1

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

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

+0

MVC与这些网址的构建无关。它的真正MVC是以它为中心的,但这并不意味着这个概念本身完全属于MVC。 – 2012-01-15 22:50:25

+0

OP并没有询问有关url的构造*,他们询问有关*访问URL的信息。这个假设是他们希望以所示的形式使用URL格式,以便将参数值传递给Web应用程序。有了这组信息,MVC是一个完全有效的建议,我会根据问题假设OP不知道的。 – 2012-01-15 22:58:12

+0

@PauliØsterø是正确的。您可以使用routes.MapPageRoute为OP显示在“普通的旧ASP.NET”中的模式创建路由。它与MVC无关。 – 2012-01-15 23:31:16

1

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

最简单的形式,你需要调用的HttpContext的重写方法,这将在内部旋转了一个新的要求执行,即其URL匹配,而用户注意到的任何代码。其中一个警告可能是,你的遗留代码不知道如何在菜单和东西中呈现正确的链接,所以你会继续像?ColorID=Red这样的网址,它应该只是Red

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

现在,路由完全是另外的事情。它是一个Asp.net功能,不能在现有的遗留代码之上工作,但需要与它一起使用。这意味着执行的代码需要知道请求已被路由到它。这当然有很多好处,你正在写一个新的系统,那么我肯定会推荐使用路由超过重写。有一个good article here有关分歧而一些问题也涉及到专题:

+0

+1 - 用于路由 – Pankaj 2012-02-22 18:29:54