C# 当使用Windows 8而不是Windows 7时,Google Api重定向在WP7上给了我404错误

C# 当使用Windows 8而不是Windows 7时,Google Api重定向在WP7上给了我404错误,c#,internet-explorer,windows-phone-7,google-api,internet-explorer-10,C#,Internet Explorer,Windows Phone 7,Google Api,Internet Explorer 10,我一直在挠头,想弄明白为什么我的一个项目(我没有碰过的东西)不再有效了 基本上我是想从谷歌联系人那里得到一些数据。当我在oAuth部分选择“allow”时,它会一直给我一个404错误。这一切都是在WindowsPhone7模拟器中完成的 然后我意识到我在Windows8分区上,所以我回到Windows7分区,它工作了 想知道是不是IE 10的问题还是什么。有人知道为什么会这样吗 编辑 下面是我快速编写的一些示例代码,也许有人可以试试,告诉我发生了什么 string clientId = "Yo

我一直在挠头,想弄明白为什么我的一个项目(我没有碰过的东西)不再有效了

基本上我是想从谷歌联系人那里得到一些数据。当我在oAuth部分选择“allow”时,它会一直给我一个404错误。这一切都是在WindowsPhone7模拟器中完成的

然后我意识到我在Windows8分区上,所以我回到Windows7分区,它工作了

想知道是不是IE 10的问题还是什么。有人知道为什么会这样吗

编辑

下面是我快速编写的一些示例代码,也许有人可以试试,告诉我发生了什么

 string clientId = "You client id here";

        public MainPage()
        {
            InitializeComponent();

            string url = String.Format("https://accounts.google.com/o/oauth2/auth?scope=https://www.google.com/m8/feeds&redirect_uri=http://localhost&response_type=code&approval_prompt=auto&client_id={0}", clientId);
            webBrowser1.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(webBrowser1_Navigated);



            webBrowser1.Navigate(new Uri(url, UriKind.Absolute));




        }



        void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
           var queryParmas = e.Uri.ParseQueryString();

           foreach (var item in queryParmas)
           {
               if (item.Key == "code")
               {
                   string test1 = "If you got here then it works";
                   string test2 = "in windows 8";

               }
           }
        }


    }
string clientId=“您的客户id在此”;
公共主页()
{
初始化组件();
字符串url=string.Format(“https://accounts.google.com/o/oauth2/auth?scope=https://www.google.com/m8/feeds&redirect_uri=http://localhost&response_type=code&approval_prompt=auto&client_id={0},clientId);
webBrowser1.Navigated+=新事件处理程序(webBrowser1\u Navigated);
webBrowser1.Navigate(新Uri(url,UriKind.Absolute));
}
无效webBrowser1_已导航(对象发送方,System.Windows.Navigation.NavigationEventArgs e)
{
var queryParmas=e.Uri.ParseQueryString();
foreach(QueryParams中的var项)
{
如果(item.Key==“代码”)
{
string test1=“如果您到了这里,它就会工作”;
字符串test2=“在windows 8中”;
}
}
}
}
xaml


Edit2

他们发布了适用于Windows7的IE10,所以我安装了它,它在Windows7上仍然有效,所以我想这不是IE的问题。一定是Windows 8的什么东西?也许是iis

Edit3

下面是Windows7中正在发生的事情的流程

  • 应用程序启动和加载MainPg.xmal
  • 已导航,但如果跳过语句
  • 用户看到谷歌登录页面,输入信息并点击登录
  • 已导航,但如果跳过语句
  • 用户看到“请求页面”,必须允许应用程序权限
  • 用户点击允许
  • 导航被触发并进入“if”语句
  • 用户看到IIS7屏幕
  • 下面是Windows8中正在发生的事情的流程

  • 应用程序启动和加载MainPg.xmal
  • 已导航,但如果跳过语句
  • 用户看到谷歌登录页面,输入信息并点击登录
  • 已导航,但如果跳过语句
  • 用户看到“请求页面”,必须允许应用程序权限
  • 用户点击允许
  • 转到404页导航未被触发

  • 正如您所看到的,在按下“允许”按钮后,它会出现所有错误。在windows 7中,它返回到导航方法,然后显示IIS 7欢迎页面,但在windows 8中,在点击“允许”按钮后,它不会转到导航页面,而是显示404。

    您应该使用“导航”事件处理程序,而不是“导航”事件处理程序。这将允许您在获得代码值时取消导航。导航处理程序在导航之后被调用,因为回调url实际上不存在,所以它抛出404错误。看起来它在Windows 8上运行正常,不确定为什么您不能在Windows 7上使用404,因为您也应该在那里看到它。

    您到底交换了什么到win7分区?我不知道您的意思?我有双启动windows 8和windows 7。我在这两个平台上都安装了windows 7 phone sdk和VS 2010。如果我使用相同的项目并在Windows8中运行它,它将不起作用。如果我在Windows7上运行它,它就会工作。谢谢,这就是我想知道的。我不清楚你是移动了一些文件还是运行了另一个操作系统。我完全不知道你到底在那里做什么,但是如果你正在切换操作系统,“本地主机”会让我产生怀疑。我有双启动。我在Windows7上的Vs2010中创建了这个项目。该项目按照预期工作,localhost是重定向url,在Google中设置为有效链接。我复制了我的项目的整个文件夹,并将其放在windows 8中,然后在Vs2010中运行。Vs2010也有windows 7 phone emulator和完全相同的sdk,但它不工作。一旦它尝试重定向,它就会失败。有趣的问题。如果您在VS2010中单步查看Win7Phone代码,404是在什么时候抛出的?我想我也尝试过导航,但我会再次尝试重新检查,您会将其反转。它适用于Windows 7,但不适用于Windows 8。我想说的是,在使用“导航”事件时,您“应该”遇到404错误,因为该事件是在导航完成后调用的,并且回调url指向无效位置。“导航”事件处理程序将在导航到回调url之前被调用,这样您就有机会在导航之前解析url,所以不会出现404错误。导航似乎给了我代码部分,所以这至少是好的,那么我想通过这种方法,我会调用一个新的视图,而不是让它重定向到localhost?你可以将e.Cancel设置为true以阻止导航,然后向你的应用程序发信号说登录成功,或者导航到新页面等。嗯,我使用的是RestSharp,代码在服务层,是异步的,所以我必须使用回调。回调发生后,我如何访问e.Cancel?我有两次回电,一次成功(将进入新页面),一次失败(将弹出)。所以我不确定是否应该让e.取消,不管结果如何
     <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <phone:WebBrowser HorizontalAlignment="Left" IsScriptEnabled="True" Name="webBrowser1" VerticalAlignment="Top" Height="669" Width="468" />
            </Grid>