Меня попросили настроить службу с использованием 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 не сериализуем.