0

我目前正在为 Windows 8.1 和 Windows Phone 8.1 构建一个通用应用程序。

在 Windows 运行时,文件选择器有一个非常易于使用的 API,如下所示:

StorageFile file = await openPicker.PickSingleFileAsync();

它将用户输入视为可以等待的异步操作。在这种情况下,如果用户取消,则返回 null,但您可以想象如果用户取消,则会引发异常。

我想知道是否有某种方法可以创建一个页面,以便我可以创建一个类似的 API。具体来说,我正在使用托管服务进行 OAuth 2.0 身份验证,我想将用户发送到托管在 WebView 中的身份验证页面,如果操作成功则返回请求访问令牌的代码,如果用户不成功则抛出异常授权我的申请。

例如:

var authentication = new AuthenticationAccess();

string code = await authentication.RequestAuthorizationAsync();

该调用将用包含 WebView 的页面交换 Frame 中的页面,用户将能够进行身份验证,然后控制将返回到调用函数,并且页面交换回原始页面。

我有点沉浸在 Windows 8.1 C#/XAML 文档中。据我了解,有一个全局 Window 对象承载一个 Frame 对象,该对象可以将其内容与应用程序中的不同页面交换。在完成了一些 Android 开发之后,我熟悉 Activity 模型,其中可以通过意图启动本质上不同的页面,并且可以将结果传播回启动它的 Activity。使用这个模型,似乎很容易将这个过程包装在我描述的模型中,但我对如何在 Windows 中做同样的事情有点困惑。我需要建立重要的架构来实现这种模式吗?

有没有一个简单的答案,或者我在我的头上?

4

1 回答 1

1

你检查了WebAuthenticationBroker吗?也许这可能是解决您的问题的简单方法。

否则 - 您可以使用TaskCompletionSource来设置您可以等待的身份验证任务,但我会尽量避免导航到您的身份验证对话框的其他页面,因为导航事件可能会弄乱您的状态并破坏正在等待身份验证完成的任何人。某种对话覆盖可能是一个更好的主意。

于 2014-04-19T06:21:13.240 回答