实体框架中System.InvalidOperationException如何处理?我是asp.netwebAPI的新手。我做了一个函数,应该对前端发送数据的用户进行身份验证,然后我在数据库中搜索数据。但是当找不到账户时,我总是得到一个异常,我应该如何处理那个异常来发送信息到前端,当第一个if语句不正确时我应该返回什么,因为nulldose不起作用。publicUserDataByPassword(stringemailAddress,stringpassword){if(emailAddress!=null&&password!=null){Accountaccount=db.Accounts.Where(acc=>acc.AccMail==emailAddress&&acc.AccPassword==password.ToLower()).Single();stringtoken=OurAuthorizationAttribute.CreateTicket(account.AccID,false);UserData数据=newUserData();data.Id=account.AccID;data.Token=令牌;返回数据;}她也加了try和catch块,还是一样的问题。publicUserDataByPassword(stringemailAddress,stringpassword){if(emailAddress!=null&&password!=null){try{Accountaccount=db.Accounts.Where(acc=>acc.AccMail==emailAddress&&acc.AccPassword==密码.ToLower()).Single();stringtoken=OurAuthorizationAttribute.CreateTicket(account.AccID,false);UserData数据=newUserData();data.Id=account.AccID;data.Token=令牌;返回数据;}catch{thrownewOurException(OurExceptionType.InvalidCredentials);}}抛出新的OurException(OurExceptionType.InvalidCredentials);}System.InvalidOperationException表示编程错误。您可以通过修复代码来处理它。在这种特殊情况下,错误出现在这一行:Accountaccount=db.Accounts.Where(acc=>acc.AccMail==emailAddress&&acc.AccPassword==password.ToLower()).Single();您的代码假定帐户必须包含任何{emailAddress,password}对的记录,这是不正确的。用SingleOrDefault替换Single会使异常消失。当然,您需要对结果进行空检查以查看记录是否存在。以下是更改代码的方法:publicUserDataByPassword(stringemailAddress,stringpassword){//空检查您的参数以检测“上游”代码中的编程错误if(emailAddress==null)thrownewArgumentNullException("emailAddress");如果(密码==null)抛出新的ArgumentNullException(“密码”);//现在您的参数已“清理”,修复Single()调用);//缺少凭据不是编程错误-在此处抛出您的特定异常:if(account==null){thrownewOurException(OurExceptionType.InvalidCredentials);}stringtoken=OurAuthorizationAttribute.CreateTicket(account.AccID,false);UserData数据=newUserData();data.Id=account.AccID;data.Token=令牌;糟糕的编码,但它并没有解决以纯文本形式存储密码的主要设计缺陷。有关在数据库中存储密码的深入讨论,请参阅此问题。以上是C#学习教程:实体框架中System.InvalidOperationException如何处理?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
