c# - 为什么 Context.RewritePath 维护查询字符串?

标签 c# asp.net url-rewriting

查看下面的代码后,我注意到对 Context.RewritePath 的调用不知何故不会丢失查询字符串,即使它是在没有查询字符串的情况下调用的。是否有任何文档解释为什么要维护查询字符串?

//URL relative path to ashx files is wrong to to path rewriting.
if (Request.Url.LocalPath.EndsWith(".ashx")) {
    Context.RewritePath(Request.Url.LocalPath
        .Substring(Request.Url.LocalPath.LastIndexOf("/") + 1));
}

编辑:我不是在问如何解决这个问题;代码行为正确。我只是要求提供此行为的文档。

最佳答案

您实际上是在重写路径,在大多数情况下,需要维护查询以传递到新路径。

以名为“getDocumentWithEnhancements.aspx”的新文档检索页面为例,而不是旧的“getDocument.aspx”。两者都需要一个有用的参数,但您希望使用新的参数。 RewritePath 可以完成这项工作,因为它将查询传递给旧的,然后传递给新的。如果你想显示某种错误页面或其他东西,那么你要么使用重定向,要么你重写的任何页面都会忽略查询字符串。

为什么不希望查询通过?你到底用这个做什么?也许它不是您需要的正确功能。

编辑:有一个带 3 个参数的重载函数,其中一个是查询字符串,您可以将其作为 null 传递以不使用查询字符串。

关于c# - 为什么 Context.RewritePath 维护查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739266/

相关文章:

java - 如何在java中重写或生成类似twitter和facebook的url

asp.net - 将存储库模式与 Entity Framework (mvc 店面)一起使用

c# - jsreport - C# 中的访问被拒绝消息

apache - Let's Encrypt证书: https://www. website.com的问题不适用于重定向到https ://website. com

c# - 反转位移运算符/2 的幂

javascript - ASP.NET Core 2.1 - PWA(Banner提示被取消)

mod-rewrite - mod_rewrite 将多个请求发送回 Lucee 服务器

c# - 在 C# 中获得 0.5% 的机会

c# - 在 .Net 中使用 ASTM 协议(protocol)进行临床设备接口(interface)编程

c# - Visual Studio 2012 不生成命名空间