c# MVC Действие jsonresult контроллера не найдено - PullRequest
0 голосов
/ 05 мая 2020

Я создаю простую веб-страницу с простой целью: чтобы люди могли связаться с кем-то еще. Для этого я создал такую ​​форму контракта:

<form id="mailForm" action="Contact/SendEmailAsync" method="post">

   @Html.AntiForgeryToken()

   <div class="form-group">
      @Html.TextBoxFor(model => model.FromName, htmlAttributes: new { @class = "form-control"})
   </div>
   <div class="form-group">
      @Html.TextBoxFor(model => model.FromEmail, htmlAttributes: new { @class = "form-control" })
   </div>
   <div class="form-group">
      @Html.TextBoxFor(model => model.EmailSubject, htmlAttributes: new { @class = "form-control" })
   </div>
   <div class="form-group">
      @Html.TextAreaFor(model => model.EMailBody, htmlAttributes: new { @class = "form-control", @cols = "30", @rows = "7" })
   </div>
<div class="form-group">
<id="formSubmit" type="submit" value="Verstuur bericht" class="btn btn-primary py-3 px-5">
</div>
</form>

Я также пробовал сокращенную версию действия бритвы.

кнопка отправки связана с вызовом ajax следующим образом:

<script>
    $(document).ready(function () {
        var mailForm = $('mailForm')
        debugger;
        var data = mailForm.serialize()

        //get button by ID
        $('#formSubmit').submit(function () {
            debugger;
            //call a function with parameters
            $.ajax({
                url: '@Url.Action("SendEmailAsync", "Contact")',
                type: 'POST',
                timeout: '12000',
                contentType: "application/json; charset=utf-8",
                datatype: 'json',
                data: data,

            })
                .done(function () {
            console.log('done')});
    });
    });

</script>

Контроллер выглядит так, но я никогда не попадал в точку останова

namespace site.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ContactController : Controller
    {

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<JsonResult> SendEmailAsync(Mail mail)
        {
            {
                var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
                var message = new MailMessage();
                message.To.Add(new MailAddress("xxxxx"));  // replace with valid value 
                message.From = new MailAddress("xxxxx");  // replace with valid value
                message.Subject = "site contactformulier";
                message.Body = string.Format(body, mail.FromName, mail.FromEmail, mail.EMailBody); ;
                message.IsBodyHtml = true;

                using var smtp = new SmtpClient();
                var credential = new NetworkCredential
                {
                    UserName = "xxxx",  // replace with valid value
                    Password = "xxxxx"  // replace with valid value
                };
                smtp.Credentials = credential;
                smtp.Host = "smtp.xxxx.be";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                await smtp.SendMailAsync(message);
                return Json("ok");
            }
        }
    }
}

Ошибка я получаю, что моя страница никогда не обнаруживается:

Веб-страница не найдена для веб-адреса: https://localhost: 44376 / Contact / SendEmailAsyn c

Что я делаю не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 мая 2020

Не могли бы вы удалить строки

[Route("api/[controller]")]
[ApiController]

И попробуйте еще раз, я считаю, что они предназначены для контроллеров API и могут не работать для контроллеров MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...