Итак, у меня есть приложение MVC, в котором я пытаюсь отправить электронное письмо из формы Angular, запущенной на сервере DotNet. Основная проблема, которую я вижу, заключается в том, что когда я вызываю службу из моего компонента Angular, она возвращает 404 (возможно, URL-адрес не найден).
Теперь у меня есть сообщение в моем контроллере, которое должно быть напечатано, но это не означает, что мой Angular не может общаться с моим внутренним контроллером.
Вот моя функция отправки Send-Email.component.ts
submit() {
if (this.EmailForm.valid) {
this.eServ.sendEmail(this.EmailForm.getRawValue()).subscribe(result => {
console.log("Email sent!");
});
this.ref.close(this.EmailForm.getRawValue())
}
}
Это мой адрес электронной почты.
export class EmailService {
constructor(private http: HttpClient) { }
headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');
sendEmail(mailMessage: any) {
return this.http.post('api/mail/sendmail', JSON.stringify(mailMessage), { headers: this.headers })
}
}
Наконец, вот мой контроллер:
[Route("api/mail/sendmail")]
[ApiController]
public class EmailController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> SendMail([FromBody] Email email)
{
Console.WriteLine("Sending email");
var client = new System.Net.Mail.SmtpClient("smtp.example.com", 111);
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new System.Net.NetworkCredential(emailid, password);
var mailMessage = new System.Net.Mail.MailMessage();
mailMessage.From = new System.Net.Mail.MailAddress(senderemail);
mailMessage.To.Add(email.To);
mailMessage.Body = email.Text;
await client.SendMailAsync(mailMessage);
return Ok();
}
}
}
Теперь я не могу понять, почему он не может разговаривать с контроллером. Что-то мне не хватает?
TIA !!
2 ответа
Похоже, службе нужно отправить объект электронной почты, а не «любой». В компоненте используйте Object.Assign для создания нового объекта Email.
Email.service
sendEmail(mailMessage: Email) {
return this.http.post<Email>('api/email/sendmail', JSON.stringify(mailMessage), { headers: this.headers })
}
Отправить-Email.Component
submit() {
if (this.EmailForm.valid) {
let dataToSend: Email = Object.assign(new Email(), this.EmailForm.getRawValue())// add this
// then the rest of the code
}
}
Контроллер выглядит нормально. Сообщите мне, если это сработает.
--Обновить--
В вашем контроллере маршрут должен быть:
[Route("api/email/sendmail")]
Потому что имя вашего контроллера - Электронная почта, а не почта.
У вас нет доменной части URL-адреса в вашем вызове API.
sendEmail(mailMessage: any) {
return this.http.post('https://example.com/api/mail/sendmail',
JSON.stringify(mailMessage), { headers: this.headers })
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.