如何处理Microsoft.aspnetcore.identity的特定错误,在使用密码创建用户时返回?

发布于 2025-02-02 05:02:43 字数 973 浏览 3 评论 0原文

如何处理特定错误(Microsoft.aspnetcore.inderity.IdentityError)在创建用户期间通过(usermanager< tuser< tuser>)类返回。例如,如果错误是:password tooshort或passwandRequiresnonalphanumeric,我想做一些事情。现在,我获得了有关错误的信息,但是IDK如何处理它们。

错误“

我不想做之类的事情,如果(IndentityError ==“错误的名称” {do doys}),我正在寻找更智能的解决方案...我浏览了很多主题,但找不到我的问题的答案,如果您知道一个问题,请重定向我...

编辑:我做了这样的事情:

if (createResult.Errors.Any(x => x.Code == "PasswordTooShort"))
        {
            var errorContent = "kielbaska";
            return RedirectToAction("ShowError", new ErrorFM
            {
                ErrorContent = errorContent
            });
        }

但是我想从括号中替换错误名称,并从可用的列表中替换错误名称结果失败错误,例如类似usrmanager.errordescriber.passwordtooshort(Just and and示例)

How to handle specific error (Microsoft.AspNetCore.Identity.IdentityError) returned during creating user by using (UserManager<TUser>)class. For example, I want to do something if the error is: PasswordTooShort or PasswordRequiresNonAlphanumeric. Now I get information about errors but idk how to handle them.

Information about error

I don't want to do something like if(IdentityError == "name of error" {do something}), I'm looking for smarter solution... I looked through a lot of topics but cannot find an answer to my question, if you know one, please redirect me...

EDIT: I made something like this:

if (createResult.Errors.Any(x => x.Code == "PasswordTooShort"))
        {
            var errorContent = "kielbaska";
            return RedirectToAction("ShowError", new ErrorFM
            {
                ErrorContent = errorContent
            });
        }

But I want to replace error name from brackets with error name from list of available result failed errors, for example something like thisusrManager.ErrorDescriber.PasswordTooShort(just and example)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁与争疯 2025-02-09 05:02:43

因为Usermanager返回身份证,并且具有身份错误
您必须创建一个像MyResult这样的新类,并在其构造函数中获得IdentityResult:

using Microsoft.AspNetCore.Identity;
    public class MyResult
    {
        public bool Succeeded { get; set; }
        public IEnumerable<IdentityError> Errors { get; set; }
        public MyResult(IdentityResult res)
        {
            this.Succeeded = res.Succeeded;
            this.Errors = res.Errors;

            foreach (var error in res.Errors)
            {
                var Error = this.Errors.FirstOrDefault(er => er.Code == error.Code);
                switch (error.Code)
                {
                    case "PasswordRequiresUpper":
                        Error.Description = "YOUR OWN MESSAGE.";

                              break;
                    case "PasswordRequiresLower":
                      Error.Description = "YOUR CUSTOM MESSAGE.";
                             break;
                    // ......
                    default:
                        Error.Description = error.Description;
                        break;
                }
            }

        }
    }

在您的控制器操作或服务功能中,您必须返回MyResult类

 var res = await um.ChangePasswordAsync(user, pass.OldPassword, pass.NewPassword);
    return new MyResult(res);

,然后在视图/组件中使用此代码:
1-定义错误变体:

IEnumerable<IdentityError> PassErrors;

2-在剃须刀代码中使用以下方式:

 @if (PassErrors != null)
   {
       <ul>
           @foreach (var item in PassErrors)
           {  
               <li class="red">                         
                   @item.Description
                   </li>
           }
       </ul>
   }

because UserManager returns IdentityResult , and it has an IEnumrable of Identity Errors
you have to create a new class like Myresult, and get an IdentityResult in its constructor:

using Microsoft.AspNetCore.Identity;
    public class MyResult
    {
        public bool Succeeded { get; set; }
        public IEnumerable<IdentityError> Errors { get; set; }
        public MyResult(IdentityResult res)
        {
            this.Succeeded = res.Succeeded;
            this.Errors = res.Errors;

            foreach (var error in res.Errors)
            {
                var Error = this.Errors.FirstOrDefault(er => er.Code == error.Code);
                switch (error.Code)
                {
                    case "PasswordRequiresUpper":
                        Error.Description = "YOUR OWN MESSAGE.";

                              break;
                    case "PasswordRequiresLower":
                      Error.Description = "YOUR CUSTOM MESSAGE.";
                             break;
                    // ......
                    default:
                        Error.Description = error.Description;
                        break;
                }
            }

        }
    }

and in your controller action or service function, you have to return MyResult class

 var res = await um.ChangePasswordAsync(user, pass.OldPassword, pass.NewPassword);
    return new MyResult(res);

then, in View/component, use this code:
1- define Error variant:

IEnumerable<IdentityError> PassErrors;

2- in razor codes use this:

 @if (PassErrors != null)
   {
       <ul>
           @foreach (var item in PassErrors)
           {  
               <li class="red">                         
                   @item.Description
                   </li>
           }
       </ul>
   }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文