ASP.NET MVC自定义成员资格提供程序 - 如何重载CREATEUSER? [英] ASP.NET MVC Custom Membership Provider - How to overload CreateUser?

查看:161
本文介绍了ASP.NET MVC自定义成员资格提供程序 - 如何重载CREATEUSER?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立自定义成员资格提供程序。我想在注册时捕获的附加信息(名和姓),我不使用的用户名(电子邮件是一个登录)。

I'm trying to build Custom Membership Provider. I would like to capture additional information (First Name and Last Name) during the registration and I'm not using usernames (email is a login).

在我的自定义成员资格提供我试图超载这样的方法CREATEUSER:

In my custom Membership Provider I'm trying to overload CreateUser method like this:

    public override MyMembershipUser CreateUser(string firstName, string lastName, 
                                       string email, string password)
    {
        ...
    }

但是,当我想从账户控制器调用它:

But when I want to call it from the Account controller:

    [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus;
            Membership.CreateUser(model.FirstName, model.LastName, 
                                  model.Email, model.Password);

            if (createStatus == MembershipCreateStatus.Success)
            {
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

我得到的错误,指出不超载的方法需要4个参数。

I get the error stating that "No overload for method takes 4 arguments".

我如何调用从定义成员资格提供一流的我的自定义CREATEUSER方法?

How do I call my custom CreateUser method from Custom Membership Provider class?

感谢您!

推荐答案

这不是很明显吗?你引用的成员,当你调用Membership.CreateUser不MyMembershipProvider。

Isn't it obvious? You're referencing Membership, not MyMembershipProvider when you call Membership.CreateUser.

看起来成员是一个静态类,它内部调用到你的会员资格供应商,所以比自己创建MyMembership静态类,做同样的事情来改变这种没有实际的办法。既然你不能从静态类继承,你就必须要么调用到Membership.XXX从静态版本,或实现自己的功能。

It looks like Membership is a static class that internally calls into your membership provider, so there is no real way to change this other than creating your own "MyMembership" static class that does the same thing. Since you can't inherit from static classes, you would have to either call into Membership.XXX from your static version, or implement the functionality yourself.

您自己MyMembership类可以再有你希望它有任何方法。

Your own MyMembership class could then have any methods you wanted it to have.

另一个选择是做这样的事情:

Another option would be to do something like this:

((MyMembershipProvider)Membership.Provider).CreateUser()

我,因为它需要你记住调用提供商CREATEUSER而非Membership.CreateUser不喜欢,虽然这种做法。另外,铸造往往是code气味(除非封装的,这就是为什么我建议你自己MyMembership静态类)。

I don't like this approach though because it requires you to remember to call the provider CreateUser rather than the Membership.CreateUser. Plus, casting is often a code smell (unless encapsulated, which is why i recommended your own MyMembership static class).

这篇关于ASP.NET MVC自定义成员资格提供程序 - 如何重载CREATEUSER?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆