Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft Graph抛出请求\u ResourceNotFound而不是null/0_C#_Asp.net Mvc_Azure Active Directory_Microsoft Graph Api - Fatal编程技术网

C# Microsoft Graph抛出请求\u ResourceNotFound而不是null/0

C# Microsoft Graph抛出请求\u ResourceNotFound而不是null/0,c#,asp.net-mvc,azure-active-directory,microsoft-graph-api,C#,Asp.net Mvc,Azure Active Directory,Microsoft Graph Api,我是一名学徒,有4个月的工作经验,我有一项任务,就是使用Microsoft Graph中的数据构建一个假期请求应用程序。应用程序的功能之一是查找用户的ss管理器并将其显示在仪表板上。在我老板登录之前,一切都很顺利。运行Microsoft Graph Query查找当前用户管理器后,Graph Api返回错误(请求\u ResourceNotFound),并中断整个应用程序,而不是返回null或0。我不知道如何处理那个错误 如果结果是null,我尝试返回null,但没有任何效果 这是我的控制器所期

我是一名学徒,有4个月的工作经验,我有一项任务,就是使用Microsoft Graph中的数据构建一个假期请求应用程序。应用程序的功能之一是查找用户的ss管理器并将其显示在仪表板上。在我老板登录之前,一切都很顺利。运行Microsoft Graph Query查找当前用户管理器后,Graph Api返回错误
(请求\u ResourceNotFound)
,并中断整个应用程序,而不是返回null或0。我不知道如何处理那个错误

如果结果是
null
,我尝试返回
null
,但没有任何效果

这是我的控制器所期望的:

var allUsersConnectedToCurrentManagerDisplayName = graphHelper.GetManagerForCurrentUser(userIdToCheck).DisplayName;
var allUsersConnectedToCurrentManagerEmail = graphHelper.GetManagerForCurrentUser(userIdToCheck).UserPrincipalName;
var allUsersConnectedToCurrentManagerId = graphHelper.GetManagerForCurrentUser(userIdToCheck).Id;
Microsoft图形助手:

User GetDirectManagerForUser(GraphServiceClient _graphServiceClient, string managerId)
{

    using(var task = Task.Run(async() => await _graphServiceClient.Users[managerId].Manager.Request().GetAsync()))
    {
        while (!task.IsCompleted)
            Thread.Sleep(200);

        var manager = task.Result as Microsoft.Graph.User;

        return manager;
    }
}

我希望它返回null,只是在没有任何人在上面的情况下不为用户显示直接管理者

必须捕获异常才能返回null。 我会这样写函数:

    public User GetDirectManagerForUser(GraphServiceClient _graphServiceClient, string managerId)
    {
        //.Result, because this function in synchronious
        try 
        {       
            var manager = await _graphServiceClient.Users[managerId].Manager.Request().GetAsync().Result;
            return manager;
        }
        catch(Exception)
        {
            return null;
        }
    } 
    public async Task<User> GetDirectManagerForUser(GraphServiceClient _graphServiceClient, string managerId)
    {

        try 
        {       
            var manager = await _graphServiceClient.Users[managerId].Manager.Request().GetAsync();
            return manager;
        }
        catch(Exception)
        {
            return null;
        }
    } 
您还可以将函数设置为异步,如下所示:

    public User GetDirectManagerForUser(GraphServiceClient _graphServiceClient, string managerId)
    {
        //.Result, because this function in synchronious
        try 
        {       
            var manager = await _graphServiceClient.Users[managerId].Manager.Request().GetAsync().Result;
            return manager;
        }
        catch(Exception)
        {
            return null;
        }
    } 
    public async Task<User> GetDirectManagerForUser(GraphServiceClient _graphServiceClient, string managerId)
    {

        try 
        {       
            var manager = await _graphServiceClient.Users[managerId].Manager.Request().GetAsync();
            return manager;
        }
        catch(Exception)
        {
            return null;
        }
    } 
公共异步任务GetDirectManagerForUser(GraphServiceClient\u GraphServiceClient,字符串managerId)
{
尝试
{       
var manager=await_graphServiceClient.Users[managerId].manager.Request().GetAsync();
退货经理;
}
捕获(例外)
{
返回null;
}
} 

为什么不指定一个?

所以这里有一些事情要做

第一个也是最明显的问题是,您的代码连续三次从图中请求相同的用户记录。您对
GetDirectManagerForUser
的每次呼叫都会下载整个用户配置文件。您希望避免这样做:

var-manager=await-graphhelp.GetManagerForCurrentUser(userIdToCheck);
var allUsersConnectedToCurrentManagerDisplayName=manager.DisplayName;
var allustersconnectedtocurrentmanagermail=manager.UserPrincipalName;
var allUsersConnectedToCurrentManagerId=manager.Id;
要避免的第二个问题是将请求包装到这样的任务中。它给代码增加了很多复杂性,使调试变得非常困难,而且不是必需的。只需在方法级别添加
async Task
,并让编译器为您处理关联:

异步任务GetDirectManagerForUser(GraphServiceClient\u GraphServiceClient,字符串managerId)
第三,您可以投射结果,但不捕获任何异常(即
404
您的获取)。您希望捕获这些内容并返回一个空用户:

var-manager=await-graphhelp.GetManagerForCurrentUser(userIdToCheck);
var allUsersConnectedToCurrentManagerDisplayName=manager.DisplayName;
var allustersconnectedtocurrentmanagermail=manager.UserPrincipalName;
var allUsersConnectedToCurrentManagerId=manager.Id;
异步任务GetDirectManagerForUser(GraphServiceClient\u GraphServiceClient,字符串managerId)
{
尝试
{
//正常路径
返回等待图服务客户端
.Users[managerId]
经理
.Request()
.GetAsync();
}
捕获(例外)
{
//出了点问题或者没有经理
var emptyUser=新用户();
}
}