0

使用 C#/.NET Google+ 登录快速启动项目,我遇到了 IIS6 的问题。以下是我遵循的步骤:

  • 从 Github 下载项目
  • 修改了 index.html 和 signin.ashx 文件以包含我的客户端 ID 和客户端密码
  • 在我的机器上运行项目(使用 Visual Studio 2010 的内置 Web 服务器)工作正常
  • 使用 IIS6 发布到 Windows 2003 服务器
  • 添加“index.html”作为网站的默认文档
  • 将网站设置为使用为 4.0 .NET 框架配置的应用程序池
  • 试图从 Chrome 访问该页面

在 URL ( https://myserver.com/gplussample/ ) 上未指定页面的情况下访问该站点会显示 Google+ 登录按钮。这很好用,我被带到带有我的个人资料照片、圈子等的页面。

但是,当我单击“断开连接”按钮时,什么也没有发生。使用 Chrome DevTools 检查该过程,我看到此错误:

POST https://myserver.com/gplussample//disconnect 404 (Not Found)

问题是//disconnect- 没有页面名称(我相信它应该是 signin.ashx,因为当我在使用 Visual Studio 2010 的开发 Web 服务器上运行应用程序时,这是有效的)。

然后我尝试使用指定的页面名称访问该站点:

https://myserver.com/gplussample/signin.ashx

这导致一个空白页面,再次查看 Chrome DevTools,我看到 .ashx 处理程序出现 400 Bad Request 错误。我搜索并搜索了 .ashx 处理程序和“错误请求”错误的解决方案,但在这种特殊情况下没有成功。

认为 IIS6 是罪魁祸首,我将网站发布到 IIS7 实例。

由于没有在 URL ( ) 上指定页面名称http://localhost/gplusoriginal/,我在使用“断开连接”按钮时遇到了相同的错误 - 无操作和 404 错误。

当我将 URL 更改为 时http://localhost/gplusoriginal/signin.ashx,我收到此错误:

Could not create type 'GPlus_ServerSideFlow.Signin'.

再次回到 Google 并检查 .ashx 处理程序和 IIS7 的问题。我找到了一篇关于 web.config 并在那里指定处理程序的帖子,所以我尝试了。

    <system.webServer>
      <handlers>
        <add name="GPlus_ServerSideFlow.Signin" path="*.ashx" verb="*"
              type="GPlus_ServerSideFlow.Signin" resourceType="Unspecified" />
      </handlers>
    </system.webServer>

将此代码段添加到 web.config 解决了“无法创建类型”错误,但导致另一个 400 Bad Request 错误。

所以,我的问题是:必须用 II6 或 IIS7 做什么才能让这个示例项目工作?配置 IIS 是否有其他需要完成的步骤?或者项目代码中缺少什么?

谢谢

4

1 回答 1

1

该示例的工作方式是 RESTful 端点被 ashx 处理程序拦截,signin.ashx.cs. 处理程序无法直接寻址,因此设置路由global.ashx.cs以将端点(/、/connect、/disconnect 等)映射到该路由处理程序。

在示例发布时,它假定内置 Web 服务器在根端口上运行。迁移到 IIS 时,您需要将路径匹配器从 Equals 更改为EndsWith以匹配您要部署到的虚拟目录:

        // Redirect base path to signin.
        if (context.Request.Path.EndsWith("/"))
        {
            context.Response.RedirectPermanent("signin.ashx");
        }

        // This is reached when the root document is passed. Return HTML
        // using index.html as a template.
        if (context.Request.Path.EndsWith("/signin.ashx"))
        {

对此延迟表示歉意......但希望能解决它!C# starter 的这个 fork有改动,用 IIS 测试过,这个更新可能很快就会合并回官方示例。

于 2013-06-05T23:48:03.263 回答