Отправить объект MailMessage в WebApi - PullRequest
0 голосов
/ 04 июня 2019

Меня попросили настроить службу с использованием WebApi 2.1, которая сможет принимать объект MailMessage в качестве параметра, отправлять это почтовое сообщение и регистрировать, что сообщение было отправлено.

Я создал свою попытку на основе следующего примера от Microsoft: https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/bson-support-in-web-api-21

Вот действия в моем контроллере:

        [HttpPost]
        [Route("api/Email/SendMailMessage")]
        public async Task SendMailMessage(System.Net.Mail.MailMessage msg)
        {
            await _emailSender.SendMailMessageAsync(msg);
        }

Вот метод тестакоторый вызывает API:

        public async void TestMailMessage()
        {
            MailMessage msg = new MailMessage();
            // snip details of msg population for brevity

            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:40353/");

                // Set the Accept header for BSON.
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));

                // POST using the BSON formatter.
                MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
                var result = await client.PostAsync("api/Email/SendMailMessage", msg, bsonFormatter);

            }
        }

Startup.cs

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddMvc().AddBsonSerializerFormatters();
            services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
            services.AddTransient<IEmailSender, AuthMessageSender>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }

Проблема, с которой я столкнулся, заключается в том, что объект MailMessage проходит через сервер как ноль.

Также я попытался сериализовать объект как байты, но это не удалось, потому что класс MailMessage не сериализуем.

...