javascript - 我用 mvc .net 写了一个 web api,但是我收到了 404 错误

标签 javascript asp.net-mvc

下面是我的脚本

$(function () {
        $(".formSubmit").click(function () {
            var cName = $('#cName').val();
            var cSurname = $('#cSurname').val();
            var cEmail = $('#cEmail').val();
            var cMessage = $('#cMessage').val();
            console.log(cMessage);
            console.log(cEmail);
            console.log(cSurname);
            console.log(cName);
            if (cName != null && cName != '' && cSurname != null && cSurname != '' && cEmail != null && cEmail != '' && cMessage != null && cMessage != '') {
                $.ajax({
                    type: "GET",
                    url: "/api/contactusapi/" + cName + "/" + cSurname + "/" + cEmail + "/" + cMessage + "/?",
                    contentType: "json",
                    dataType: "json",
                    success: function (data) {
                        if (data != null) {

                        }
                    },
                    error: function (xhr) {
                        alert(xhr.responseText);
                    }
                });
            }
        });
    });

下面是我的“contactusapi”api

namespace iskorumacom.Controllers
{
    public class ContactUsApiController : ApiController
    {
        [HttpGet]
        public int Get(string cName, string cSurname, string cEmail, string cMessage)
        {
            try
            {
                using (Data.DataClassesDataContext dc = new Data.DataClassesDataContext())
                {
                string cHTML =
                              "<h3></h3>" +
                              "<b>Ad:</b> " + cName + "<br />" +
                              "<b>Soyad :</b> " + cSurname + "<br />" +
                              "<b>e-Mail :</b> " + cEmail + "<br />" +
                              "<b>Mesaj :</b> " + cMessage;

                using (MailMessage MailMessageLocal = new MailMessage())
                {
                    MailMessageLocal.From =
                        new MailAddress("m@majorworx.com", cName + " " + cSurname, System.Text.Encoding.UTF8);


                    MailMessageLocal.To.Add("m@majorworx.com");

                    MailMessageLocal.Subject = "İletişim Formu Formu";
                    MailMessageLocal.IsBodyHtml = true;
                    MailMessageLocal.BodyEncoding = System.Text.Encoding.UTF8;
                    MailMessageLocal.Body = cHTML;
                    MailMessageLocal.Priority = MailPriority.High;

                    using (SmtpClient SmtpClientLocal = new SmtpClient())
                    {
                       
                        return -1;

                    }
                }


            }
        }
        catch
        {
            return 0;
        }
    }
  }
}

和我的 route.config 文件夹

public static void RegisterRoutes(RouteCollection routes)
{
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new string[] { "iskorumacom.Controllers" }
        );
    }

最佳答案

您的 Controller 继承自 ApiController,但您的路由是为 MVC Controller 配置的。

  1. 如果你想使用 ApiController 然后使用 .MapHttpRoute 方法配置路由。
  2. 如果您想使用 .MapRoute 方法进行配置,则从 Controller 而不是 ApiController 继承您的 Controller 。

此外,在您的网址中,您要在主机和端口之后添加 /api/api 在使用 .MapHttpRoute 定义路由时在 routeTemplate 中定义,如下所示 -

 config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

在您的情况下,将您的 WebApiConfig 配置为 -

  config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

现在使用 url /api/contactusapi?cName=myname&cSurname=mysurname&cEmail=myemail&cMessage=mymessage 调用您的 api

或者您可以将 Route 属性添加到您的操作方法中,如下所示 -

namespace iskorumacom.Controllers
{
   public class ContactUsApiController : ApiController
   {
      [HttpGet]          
      [Route("api/contactus/{cName}/{cSurName}/{cEmail}/{cMessage}")]
      public int Get(string cName, string cSurname, string cEmail, string cMessage) {
         // Your code
      }
   }
}

现在将您的 API 称为 - /api/contactus/myname/mysurname/myemail/mymessage

关于javascript - 我用 mvc .net 写了一个 web api,但是我收到了 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65300224/

相关文章:

javascript - .focus() on keydown() 只运行一次

javascript - 按下按钮时 React 组件不更新

asp.net-mvc - 如何使用 ASP.NET MVC 3 在回发期间保留文本

asp.net-mvc - 我可以在 asp.net mvc Controller 中有多个 Post 方法吗?

asp.net - 将 Container.Eval 传递给 ASP.NET Repeater Control 内的 (Html.ReaderPartial)

javascript - 如何将CSS与jQuery一起应用并在过滤后忽略隐藏元素?

javascript - 什么是||在 console.log() 中用 javascript 做什么?

php - JavaScript 对象对关联数组(又名 map )有效吗?有哪些选择?

javascript - 使用 Json 和 Jquery 的 Asp.net MVC4 中的级联下拉列表不填充

javascript - Knockout.js 验证