【问题标题】:Transfer a Request to a Page Asp.net将请求传输到页面 Asp.net
【发布时间】:2015-05-29 12:02:09
【问题描述】:

在我的 Asp.net 4.0 网站中,我有一个页面显示特定用户的个人资料。页面地址如下。

www.mysite.com/PublicProfile.aspx?UserID=1234

我想设置这样一种机制,如果客户端提供以下请求,服务器会重定向或提供响应

www.mysite.com/1234

我认为这可以通过 url 重写或使用 Http 处理程序来完成。 对此有任何帮助,在此先感谢。

【问题讨论】:

  • 一个更复杂的 url 重写替代方案,特别是如果你要经常这样做是在 web 表单中实现 mvc 路由:weblogs.asp.net/scottgu/…
  • 这可能会有所帮助:asp.net/web-forms/videos/net-4/routing/…
  • 我可能会建议您将路由稍微修改为www.mysite.com/users/1234。它使 ID 号的用途更加清晰,并为将来的 URL 提供了可能性,例如www.mysite.com/articles/1234。快速而肮脏的方法是实现Friendly URL's。这允许您从 URL 中删除文件扩展名并使用段而不是查询字符串来从 URL 获取值。
  • 如果您这样做,请确保如果您将用户 ID 更改为 1235、一堆字母、无效值或什么都没有,则一切正常。 (网址可以修改)

标签: c# asp.net


【解决方案1】:

您可以找到here 一篇关于 url 重写的精彩文章,您想要的结果如下所示。

<rule name="PublicProfile" stopProcessing="true">
   <match url="^([0-9]+)$" ignoreCase="true"/>
   <action type="Rewrite" url="/PublicProfile.aspx?UserID={R:1}"/>
</rule>

注意事项:

  1. ^([0-9]+)$ 仅用于数字
  2. stopProcessing="true" 表示不再检查规则。
  3. {R:1} 将包含匹配规则的号码
  4. 规则需要在Web.config&lt;system.webServer&gt;&lt;rewrite&gt;&lt;rules&gt; &lt;!-- add rule here --&gt; &lt;/rules&gt;&lt;rewrite&gt;&lt;system.webServer&gt;下添加

【讨论】:

【解决方案2】:

是的,你写的是 url 重写是可能的。

您需要使用 IIS 管理器中的 URL 重写 UI 创建重写规则 步骤是:

转到 IIS 管理器。
选择默认网站。
在功能视图中单击 URL 重写。
在右侧的“操作”窗格中,单击“添加规则”。
在“添加规则”对话框中,选择“空白规则”并单击“确定”。

现在您必须定义实际的重写规则。在 URL 重写模块中,重写规则是通过指定四个必需的信息来定义的:

规则的名称。 用于匹配 URL 字符串的模式。 可选的一组条件。 模式匹配以及所有条件检查是否成功时执行的操作。

命名规则

在“名称”文本框中,输入唯一标识规则的名称,例如:“Rewrite to article.aspx”。

定义模式

在模式文本框中,输入以下字符串:^article/([0-9]+)/([_0-9a-z-]+)

此字符串是一个正则表达式,指定该模式将匹配任何满足以下条件的 URL 字符串:

以字符序列“article/”开头。 在第一个“/”之后包含一个或多个数字字符。 在第二个“/”之后包含一个或多个字母数字或“_”或“-”字符。

请注意,正则表达式的某些部分在括号内。这些括号创建捕获组,以后可以使用反向引用在规则中引用。

定义一个动作

由于我们创建的规则应该重写 URL,因此请选择操作组框中列出的重写操作类型。在重写 URL:文本框中,输入以下字符串:article.aspx?id={R:1}&amp;title={R:2}

此字符串指定输入 URL 应重写为的新值。请注意,对于查询字符串参数的值,我们使用了 {R:1} 和 {R:2},它们是对规则模式中使用括号定义的捕获组的反向引用。

为所有其他设置保留默认值。编辑入站规则属性页应该是技术图片Here

查看配置文件中的重写规则

重写规则存储在 ApplicationHost.config 文件或 Web.config 文件中。要检查我们刚刚创建的规则的配置,请打开位于 %SystemDrive%\inetput\wwwroot 中的 Web.config 文件。在此文件中,您应该会看到包含此​​规则定义的部分:

 <rewrite><rules>
<rule name="Rewrite to article.aspx">
  <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
  <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
</rule>

&lt;/rewrite&gt;

测试重写规则

要测试规则是否正确重写 URL,请打开 Web 浏览器并请求以下 URL:

http://localhost/article/234/some-title

您应该看到您的 Web 服务器上的重写规则已将原始 URL 更改为 Article.aspx,并且它已将“234”和“some-title”作为查询字符串参数的值传递。

【讨论】:

  • 不要仅仅链接到站外资源。您的答案应该能够在没有链接的情况下独立存在。您可以删除您的答案,也可以将链接中的相关信息复制到您的答案中。
  • 我可以分享来自 stackoverflow 或 Microsoft(MSDN) 的任何链接吗?
  • 如果链接指向 Stack Overflow,它应该只是一条评论,或者您可以将问题标记为该帖子的副本。如果链接指向 MSDN,它应该只是评论将链接中的足够信息总结到您的答案中,如果链接中断,它实际上很有用。无论链接是指向 SO 还是 MSDN,您都不应该只给出“查看此链接”的答案。
  • 上面已经有一个成员分享了来自其他网站的链接和他的答案,所以我在这里使用这个。
  • 他将链接分享到另一个站点(这很好)并且他将相关信息总结为他的答案。您没有将链接中的相关信息汇总到您的答案中,这就是您应该删除或更新它的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2013-12-08
  • 1970-01-01
  • 2012-01-30
  • 2013-11-22
  • 1970-01-01
相关资源
最近更新 更多