【转】Microsoft Graph Web应用程序极致开发体验

前言

这篇文章最早写于2017年5月2日,当时的想法是从最简单的方式来写如何在一个ASP.NET MVC应用程序中集成Microsoft Graph,但实际上还真不是那么简单,至少我是不满意的,加上这一两周都比较忙,所以这一篇就一直搁置。直到上周的一个契机,让我看到了一个全新的方式,而且可以极大地改变我们在Web应用程序中集成Microsoft Graph,所以抓紧做了实践,写出来给大家参考。

在今年3月份Visual Studio 2017进行发布的时候,我已经发现它新增了一个很重要的功能,名称叫Connected Services,它提供了连接Azure AD,Office 365等云端服务的能力,这让我大喜过外,因为这确实是我们一直需要的东西。但仔细看下来,却发现这个第一版的功能,并不是最新的Microsoft Graph集成,而是Office 365传统的每个服务单独的RestAPI的接口。

由于我正好在写这个系列文章,对Microsoft Graph有些研究,对其重要性深有感触,所以我当即给公司内部负责Visual Studio的最高领导(Julia Liuson —— 潘正磊女士)发了邮件提出意见,希望她能尽快考虑直接集成Microsoft Graph。没想到Julia很快就回了邮件,在表示亲切慰问的同时明确表态会尽快考虑这个需求,而就在前不久举办的Build 2017大会上,我们就看到了这个组件的更新,包含在最新的Visual Studio 2017 Preview中。

我将这个有意思的小插曲写出来,当然不是天真地认为这个更新的快速推出有我什么功劳。但从这里可以看出微软的产品组是很重视一线(包括客户,用户以及内部员工等)反馈的声音,而且他们的响应速度是非常快的。我必须为他们点个赞!

Visual Studio 2017 Preview是一个特殊的版本,可以单独安装,并且可以与现存的Visual Studio其他版本共存。它的下载地址在 https://www.visualstudio.com/vs/preview/ .

与此同时,Microsoft Graph的官方网站也提供了一篇专门的文章介绍如何使用这个Connected Service来实现与Graph的集成,请参考 https://developer.microsoft.com/en-us/graph/docs/concepts/office_365_connected_services

根据范例快速体验

我非常推荐你根据官方文档的说明,下载它的那个范例代码来快速实践。

在Visual Studio 2017 Preview中打开上面这个解决方案,并且打开Connected Services的界面 

选择“Access Office 365 Services with Microsoft Graph”,输入或者选择你的Office 365 租户信息。请注意,这里目前还只支持国际版 

点击“Next”进行Application的配置,如果是第一次操作,则选择“Create a new Azure AD Application” 

接下来,按照文档要求, 选择以下几个权限

For the File APIs, set permissions to Have full access to your files
For the Mail APIs, set permissions to Send mail as you
For the User APIs, set permissions to Sign you in and read your profile

最后,按照文档要求,将Models目录下面的GraphService.cs文件中的几行代码取消注释。一切就绪,我们就可以调试了。 

点击右上角的“Sign in with Microsoft”,会被导航到Office 365的登录页面 

输入用户名和密码后,点击“Sign In”,系统会引导你对权限进行确认 

点击“Accept”后回到主界面,然后点击“Get email address” 按钮可以看到读取到当前用户的邮箱地址,然后点击“send mail”则可以实现邮件发送。 

看起来还是不错的,对吧?那么,这是怎么做到的呢?首先是Visual Studio帮我们做了不少工作,主要是自动完成应用程序注册,并且在配置文件中保存信息 

其次,这个范例程序,里面有几个文件预先编写好了代码

我不想解释这些代码。我当然是知道为什么应该这么写,但并不想让每个人都去这么写。作为一个有一点追求的老同志,我根据这些代码的逻辑封装了一个组件,便于在大家后续开发的时候,直接使用。

在你的应用中快速集成Microsoft Graph

范例运行成功并没有什么了不起,下面就要看一下怎么在一个自己写的应用程序中实现同样的功能。我上面提到了,虽然Visual Studio帮我们做了不少工作,但有些代码还是省不了的,为了让大家的代码减到最少,我写了一个组件,叫做Office365GraphMVCHelper。

接下来我就带大家来极致体验一下,怎么用不到三行代码就完整地实现Microsoft Graph的调用。对,就是这么任性。

请注意使用Visual Studio 2017 Preview,同时确保上面对话框中,目标的Framework选择 4.6。然后再下面的对话框中选择“Empty”模板,并选择“MVC”这个功能

按照之前的介绍,添加"Connected Service","Access Office 365 Services with Microsoft Graph"。作为演示目的,请选择一个权限即可

接下来就是添加我写好的那个组件,请运行下面的命令 Install-Package Office365GraphMVCHelper

接下来为当前这个项目添加一个启动类(Owin Startup Class):Open Web Interface for .Net

用一行代码为启动类添加Microsoft Graph身份功能 

接下来就可以实现业务模块了,我们可以添加一个默认的Controller,在Index这个Action里面,我用两行代码做了实现:读取当前用户的信息,并且输出到浏览器。

请不要告诉你不知道什么叫Controller,咱这篇文章讲的是MVC哦

运行起来看看效果吧。在要求你输入用户名和密码,以及授权确认后,你将看到如下的界面。 

当然,这只是一个演示,但只要打开了这扇大门,接下来你要做的就是尽情地调用Microsoft Graph所提供的功能了,详情请参考 https://github.com/microsoftgraph/msgraph-sdk-dotnet 。

总结

这一篇文章讲解了Visual Studio 2017 Preview最新推出的直接将Microsoft Graph集成到应用程序的开发体验,并且演示了如何借助我封装好的一个组件,进一步将后续编码简化到最少。我后续还会看看怎么把中国版的功能整合进来。

已经实现对中国版Office 365的支持

2017年5月31日,重构代码实现了对中国版Office 365的支持,并且将Office365GraphMVCHelper这个工具包升级到了2.0版本。 

由于Visual Studio 2017 Preview提供的工具,不能直接添加中国版的Office 365作为Connected Service,所以,你需要手工地在中国版Office 365中注册应用程序,并且在web.config文件中添加如下的信息

<add key="ida:ClientId" value="1142d051-c271-4044-b1ac-522c8029e3b7" />
<add key="ida:ClientSecret" value="Ei4JeIsuKzPVfnkgAmWSFfE9p5YKs0yhm41dcZo/ink=" />
<add key="ida:TenantId" value="12c0cdab-3c40-4e86-80b9-3e6f98d2d344" />
<add key="ida:Domain" value="modtsp.partner.onmschina.cn" />
<add key="ida:AADInstance" value="https://login.chinacloudapi.cn/" />
<add key="ida:ResourceId" value="https://microsoftgraph.chinacloudapi.cn" />

请注意,最后一行跟国际版不一样。国际版可以省略。

这样完成设置后,其他的代码都是和国际版一样的,尽情享受吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark(idea)操作mysql进行查询和插入 (代码+理解)

首先在maven中加入配置 <!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency>然后在idea配置数据库 1&#xff09; 查询 //1.查询数…

【转】在无人值守程序(服务)中调用Microsoft Graph

什么是无人值守程序&#xff08;服务&#xff09; 我在此前用了几篇文章分别介绍了在桌面应用程序&#xff08;控制台&#xff09;&#xff0c;Web应用程序&#xff08;ASP.NET MVC&#xff09;&#xff0c;以及PowerSehll脚本中如何访问Microsoft Graph&#xff0c;今天这一篇…

MapReduce的shuffle阶段

Shuffle 为何需要shuffle • Reduce阶段的数据来源于不同的Map Shuffle由Map端和Reduce端组成 Shuffle的核心机制 • 数据分区排序 Map端 • 对Map输出结果进行spill Reduce端 • 拷贝Map端输出结果到本地 • 对拷贝的数据进行归并排序Shuffle Map端 Map端会源源不断的把数据输…

【转】使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇

前言 在上一篇文章 基于Office 365的随需应变业务应用平台 中我提到&#xff0c;随着随需应变的业务需要&#xff0c;以及技术的发展&#xff0c;业务应用的开发的模式也有了深刻的变化。基于微软的平台&#xff0c;有服务于主干业务应用的Dynamic 365 业务应用平台&#xff0…

Spark内核源码学习(暂未学完)

1&#xff09; 回顾 1.1 Spark通用运行流程概述 在submit任务条件是需要指定executo个数&#xff0c;executor-CUP个数&#xff0c;可以提高并行度。 什么是并行&#xff0c;什么是并发&#xff1f; 并发&#xff1a;假如有多个任务task&#xff0c;并行是在一个cup中&#x…

【转】使用PowerApps快速构建基于主题的轻业务应用 —— 进阶篇

在上一篇 使用PowerApps快速构建基于主题的轻业务应用 —— 入门篇 中&#xff0c;我用了三个实际的例子演示了如何快速开始使用PowerApps构建轻业务应用&#xff0c;你可能已经发现&#xff0c;我都是使用默认生成的设置&#xff0c;没有做任何修改。当然&#xff0c;那样做出…

Spark一些组件的定义

Driver program: 运行应用程序的main函数并创建SparkContext的进程 除了RDD的最终执行所写的业务逻辑&#xff0c;剩下的都在Driver里生成&#xff0c;Driver端执行action算子才会到开始执行所创建的DAG-RDD图。 Cluster manager&#xff1a; 用于获取集群资源外部服务 Mas…

【转】D365 FO第三方集成(二)---访问认证(获取访问令牌)

D365 FO 在github上发布了第三方访问D365 FO的示例代码&#xff0c;里面包含了各种调用示例&#xff0c;代码很清晰。https://github.com/microsoft/Dynamics-AX-Integration 这篇blog简单分析一下代码中获取访问令牌的部分代码。 与获取访问令牌相关的代码有两个类ClientConfi…

SparkSQL练习+理解+详解

def main(args: Array[String]): Unit {//创建配置对象val conf new SparkConf().setAppName("SparkSQL01_demo").setMaster("local[*]")val session SparkSession.builder().config(conf).getOrCreate()//创建RDD (session里包含sparkContext&#xf…

【转】D365 FO第三方集成(三)---服务实现

D365 FO的Custom Service的实现比AX2012简单了很多。 AX2012服务方法要用属性SysEntryPointAttribute标记&#xff0c;添加到Services以后&#xff0c;还要发布服务并在系统管理入站端口添加操作&#xff0c;服务运行在CIL下&#xff0c;所以每次改动服务方法的代码都要增量生成…

SparkSQL自定义AVG强类型聚合函数与弱类型聚合函数汇总

AVG是求平均值&#xff0c;所以输出类型是Double类型 1&#xff09;创建弱类型聚合函数类extends UserDefinedAggregateFunction class MyAgeFunction extends UserDefinedAggregateFunction {//函数输入的数据结构&#xff0c;需要new一个具体的结构对象&#xff0c;然后添加…

PHP连接sql seaver数据库

我的PHP版本7.0 通过sqlsrv系列函数&#xff0c;需要下载安装Microsoft Drivers for PHP for SQL Server驱动&#xff1a; 地址&#xff1a;https://msdn.microsoft.com/library/dn865013.aspx。 根据自己需求下载安装&#xff0c;安装地址php下ext目录下&#xff0c;我的是4.0…

【转】D365 FO第三方集成(四)---客户端调用

客户端调用json-based服务非常简单&#xff0c;就是标准的http调用。 http调用首先要解决URL的组成&#xff0c;D365 FO json-based调用的url组成如下&#xff1a; https://usnconeboxax1aos.cloud.onebox.dynamics.cn/api/services/{服务组名}/{服务名}/{方法名} 调用的代码很…

NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解

1&#xff09;什么是Nosql NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c; 泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显…

ztree 点击重载 layui table

ztree 点击重载 layui table <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <HEAD><TITLE> ztree_demo </TITLE><meta http…

【转】D365 FO第三方访问https证书问题

D365FO采用https&#xff0c;第三方通过API调用的时候&#xff0c;客户端不见得信任D365FO的证书&#xff0c;调用时候会报 基础连接已关闭&#xff0c;发送时发生错误&#xff0c;调用堆栈如下&#xff1a; 1 at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int…

数据结构与算法 - 稀疏数组(理解+代码实现案例)

举例 稀疏数组第一行是原数据几行几列和几个有效数据的个数 下面的行是各个有效数组的行列与具体值 稀疏数组实现 代码实现 package DataStructures.sparsearray;/*** 二维数组转稀疏数组 与 稀疏数组转成二维数组*/ public class SparseArray {public static void main(Stri…

php检测字符长度(中文)

strlen() mb_strlen() mb_strlen并不是PHP核心函数&#xff0c;使用前需要确保在php.ini加载了php_mbstring.dll&#xff0c;并开启extensionphp_mbstring.dll $str中文asd12;echo strlen($str).<br>;//11echo mb_strlen($str,utf8).<br>;//7

【转】Magento2 数据库操作

直接操作数据库 $objectManager \Magento\Framework\App\ObjectManager::getInstance(); $resource $objectManager->get(Magento\Framework\App\ResourceConnection); $connection $resource->getConnection(); $tableName $resource->getTableName(employee); …

数据结构 - 队列(非环形队列,以及优化成环形队列)

1&#xff09;队列的定义与实现形式-方式 2&#xff09;队列实现思路&#xff08;非环形&#xff0c;下面进行优化&#xff09; 3&#xff09;代码实现&#xff08;注意并不是环形&#xff09; package DataStructures.queue;import java.util.Scanner;/*** 使用数组模拟队列*…