用C#编写的.NET 3.5应用程序,包含jQuery和一些ASP.NET AJAX UpdatePanel调味。 我遇到了一个有趣的问题。我创建了一个由LinkButtons组成的分页用户控件。只要有人点击页面,上一个,第一个或下一个按钮,用户控件就会触发一个名为CurrentPageChanged的事件。然后,使用此分页控件的页面负责根据单击的分页控件项获取最新的记录集。
现在,我遇到的问题是: 如果我有这样的网址:http://localhost:2798/user/9794/profile,一切正常。但是,如果我有一个带斜杠的网址(即http://localhost:2798/user/9794/profile/),我的UpdatePanel就会出现405错误。
有问题的例外是:
[例外] Sys.WebForms.PageRequestManagerServerErrorException:Sys.WebForms.PageRequestManagerServerErrorException:在服务器上处理请求时发生未知错误。从服务器返回的状态代码是:405
现在,我通过Chrome的开发者工具查看了请求,我发现它正在请求此网址: http://localhost:2798/user/9794/profile/profile。看起来如果有一个尾随斜杠,它会追加一条额外的路径。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
看起来如果有一个尾随斜杠,它会追加一条额外的路径。
是的,这就是相对网址的工作方式。浏览器使用尾部斜杠来决定URL是指文件夹(在这种情况下URL可以引用该文件夹中的另一个文件),还是文件(在这种情况下,它必须查找父文件夹)。因此,尾随斜杠网址中的<a href="profile">
确实会指向.../profile/profile
。
我有什么想法可以解决这个问题吗?
在您创建链接的任何地方(显式或通过ASP.NET控件)使用绝对URL(或更好的,根据相对的URL,如href="/user/9794/profile"
。)相对URL与URL的“路由”样式不兼容您可能在URL中有可变数量的斜杠分隔数据。
和/或仅使用规范网址,以便始终修复任何给定资源的网址;如果您使用URL中的额外斜杠或其他冗余内容转到“错误”版本,则会获得301重定向到“正确”版本。