Url编码#(%23)在ASP.NET应用程序中导致404

wit*_*ith 2 asp.net iis url silverlight encoding

我有一个深度链接的Silverlight RIA尝试使用Twitter OAuth回调.RIA中回调"页面"的URL是:

http://example.com/RiaTestPage.aspx#callback
Run Code Online (Sandbox Code Playgroud)

只要#符号是URL编码,Twitter就会回拨此URL; 所以我提供给Twitter的回调网址是:

http://example.com/RiaTestPage.aspx%23callback
Run Code Online (Sandbox Code Playgroud)

RiaTestPage.aspx当然存在,但是当Twitter回调这个URL时,我得到一个404(来自VS 2010 ASP.NET开发服务器)

'/'应用程序中的服务器错误

无法找到该资源.

说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.

请求的URL:/RiaTestPage.aspx#callback

虽然#符号已在上面的错误消息中正确解码,但404似乎是编码#符号的结果.如果我手动更改导致404的回调网址,

http://example.com/RiaTestPage.aspx%23callback
Run Code Online (Sandbox Code Playgroud)

对此:

http://example.com/RiaTestPage.aspx#callback
Run Code Online (Sandbox Code Playgroud)

RIA中的回调页面正常加载.为什么我在这种情况下收到404?

Guf*_*ffa 5

您收到404错误,因为该#callback部分不是URL的一部分.它是浏览器使用的书签,它从未在请求​​中发送到服务器.如果对哈希进行编码,则它将成为文件名的一部分,并且没有名为的文件RiaTestPage.aspx#callback.