ASP.NET开发服务器不接受pathinfo中的点

时间:2010-12-06 18:13:48

标签: asp.net facebook facebook-c#-sdk

我正在尝试使用facebook c#SDK(v4.0.2),当facebook尝试重定向回SDK的重定向处理程序时遇到404错误。生成的URL为:

http://localhost:9152/facebookredirect.axd/elserdemo/Default.aspx?session={%22session_key%22%3A%222.GJsQK_BkApJNH8TncuFHpQ__.3600.1291665600-678938033%22%2C%22uid%22%3A%22678938033%22%2C%22expires%22%3A1291665600%2C%22secret%22%3A%22dnmnVip8JJ31rHUs2byKeQ__%22%2C%22base_domain%22%3A%22localhost%22%2C%22access_token%22%3A%22133477943366316|2.GJsQK_BkApJNH8TncuFHpQ__.3600.1291665600-678938033|xtjv95K4Lj_wg2-X3comNL4haG0%22%2C%22sig%22%3A%2241b1c3884488a9c9fa82b398c7fa80dc%22}

我将facebook应用设置为画布的iframe模式以及必要的迁移设置。我还确保画布URL指向我的本地开发服务器。但是,当浏览器尝试加载上面的URL时,我从ASP.NET获得了404。

如果pathinfo不包含句点,它可以正常工作并重定向到我的应用程序,所以看起来它是“default.aspx”中的句号,它搞砸了,但我不知道为什么。有什么想法吗?解决方法?

编辑:

虽然这与facebook SDK有关,但并不是特定于此。这显然是一个ASP.NET开发服务器问题。例如,如果我尝试加载:

http://localhost:9152/facebookredirect.axd/elserdemo/default.aspx

我得到了404.但是,如果我尝试加载:

http://localhost:9152/facebookredirect.axd/elserdemo/default

它可以工作,但最终我在iframe的facebook屏幕上显示404(因为默认在我的应用中无效)。

编辑#2:

这不是URL中无效字符的问题。如果是,我将收到400错误代码(错误请求)。相反,我收到404,它告诉我开发服务器正在尝试加载一个不存在的文件,而不是停在.axd并将其余的文件传递给Request.PathInfo。我不确定为什么这样做,所以这就是我在这里寻找的。

4 个答案:

答案 0 :(得分:0)

您的应用未重定向到正确的地址。您正在获取FacebookSession对象的序列化版本,而不是带有signed_request的查询字符串。

确保在Facebook应用配置页面上设置正确的值。

答案 1 :(得分:0)

您必须将重定向处理程序添加到web.config才能使重定向生效,只需将此行添加到您的web.config

  <system.webServer>
  <handlers>
      <add name="facebookredirect.axd" verb="*" path="facebookredirect.axd"
           type="Facebook.Web.FacebookAppRedirectHttpHandler, Facebook.Web" />
  </handlers>

答案 2 :(得分:0)

点击重置前一个答案。

究竟是什么告诉浏览器转到此网址:http://localhost:9152/facebookredirect.axd/elserdemo/default.aspx

我问,因为Facebook应配置为只转到http://localhost:9152/,并且您在问题中指出,当Facebook重定向回您的网站时会发生这种情况。处理程序的名称不应该在URL中,这使我相信你在facebook本身中错误配置了应用程序。

自动为每个传入请求执行Web处理程序(如axd)。如果它检测到它需要根据请求流做某事,那么它就会。

答案 3 :(得分:0)

我得到了同样的错误 - 事实证明它与url的“扩展名”映射的mimetype有关。在您的情况下,ASP.NET开发服务器正在寻找mimetype“.12916656 ....”,或者更确切地说是url末尾的最后一段时间。

如果在本地计算机上切换到IIS,则可以使用通配符将默认mimetype设置为application / octet-stream(详细信息请参见下面的链接)。但是,在ASP.Net开发服务器中无法做到这一点:

http://support.microsoft.com/kb/326965

404错误和“找不到文件”异常似乎是服务器处理未定义的mimetypes的方式......非常令人困惑。