【问题标题】:C# Method or Object cannot be called second timeC#方法或对象不能被第二次调用
【发布时间】:2021-06-05 16:04:28
【问题描述】:

我完全是 C# 的菜鸟,并尝试将自动邮件服务添加到我的后端 API 中以用于 Angular 前端。 它一次可以按预期正常工作,但不能再次使用。我想我违反了一些对象规则,也许有人能够指出我的错误。

这是我的文件 UserAuthController.cs 的摘录,其中包括注册功能。在我的网站上注册成功后,它还将从我的自动邮件系统调用 API 服务。 我不知道如何正确包含该函数,所以我添加了一个新的命名空间。

namespace Gogo_Api.Controllers
{
    [RoutePrefix("UserAuth")]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class UserAuthController : ApiController
    {
        private readonly IUserAuthManager _userAuthManager;

        public UserAuthController()
        {

        }
        public UserAuthController(IUserAuthManager userAuthManager)
        {
            this._userAuthManager = userAuthManager;
        }

        [HttpPost]
        [Route("Register")]
        public HttpResponseMessage Register(UserDetails user)
        {
            var response = new RegisterResponse();
            response.code = _userAuthManager.Register(user);
            if (response.code == 1)
            {
                response.message = "Registration successful ";

                //Including API Service here...
                Sendinblue.Program RegisterMail = new Sendinblue.Program();
                RegisterMail.Main(user.email, user.displayName, user.country);
                RegisterMail = null;
               
            }
            else if (response.code == 2)
            {
                response.message = "User already registered ";
            }
            else if (response.code == 0)
            {
                response.message = "Error occured";
            }
            return Request.CreateResponse(HttpStatusCode.OK, response);
        }

    }
}



namespace Sendinblue
{
    class Program
    {
        public void Main(string userMail, string userName, string userCountry)
        {
            Configuration.Default.ApiKey.Add("api-key", "MYKEY");

            var apiInstance = new ContactsApi();
            string email = userMail;
            JObject attributes = new JObject();
            attributes.Add("USERNAME", userName);
            attributes.Add("COUNTRY", userCountry);
            List<long?> listIds = new List<long?>();
            listIds.Add(5);
            try
            {
                var createContact = new CreateContact(email, attributes, emailBlacklisted, smsBlacklisted, listIds, updateEnabled, smtpBlacklistSender);
                CreateUpdateContactModel result = apiInstance.CreateContact(createContact);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                Console.WriteLine(e.Message);
            }
        }


    }
}

我添加了“RegisterMail = null;”因为我认为我需要先删除我的对象才能再次使用它,但它仍然只能在第一次使用。 我怎样才能多次调用我的函数?

谢谢

【问题讨论】:

  • 以同样的方式将userAuthManager添加到控制器中,将邮件程序作为服务添加到应用程序并让DI创建并提供给您。你的控制器应该只调用一个服务,它不应该做任何实际的工作(除了将数据传递给各种服务)。

标签: c# sendinblue


【解决方案1】:

感谢@Richard Barker,您的评论帮助我解决了这个问题。 我已将所有内容移出 Controller 并不得不移动

Configuration.Default.ApiKey.Add...
apiInstance = new ContactsApi();

到 Initializer 中的一次性调用,因此 API 调用和 ContactsApi 只创建一次,而不是每次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多