c# - Javascript ajax 调用无法访问我的 Web API Controller 页面。似乎无法获取正确的网址

标签 c# javascript jquery ajax asp.net-web-api

我有一个注册页面,我正在尝试将输入字段保存到“用户”表中的新记录中。

 <button class="btn-u" type="submit" 
 onclick="submitclicked()">Register</button>

点击被接收,我可以在我的 .js 上命中断点

function submitclicked() {
    insertNewUser();

    ko.applyBindings({ insertNewUser: insertNewUser });
};

function Person() {
    this.FirstName = firstname();
    this.LastName = lastname();
    this.Email = email();
    this.Password = password();
}

var insertNewUser = function () {

    var person = new Person();
    var url = "/api/Home/addUser"
    $.ajax({
        url: url,
        type: 'post',
        data: person,
        contentType: "application/json; charset=utf-8",
        success: function (result) {
        }
    })
};

我的 RegController.cs 文件中也有一个断点,但它从未被命中。这让我相信它永远不会进入我的 Controller 。我的 Controller 如下所示:

public class RegController : ApiController
{
   //now insert  these values into the DB
    private static void addUser(Person item)
    {
        var db = new MyEntities();

        try
        {
            User record = new User()
            {

                First_Name = item.FirstName,
                Last_Name = item.LastName,
                Email = item.Email,
                Password = item.Password
            };
            db.User.Add(record);
            db.SaveChanges();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.InnerException);
        }
    }

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }

}

在解决方案资源管理器中,它会转到 RegController.cs > RegController > Person > addUser(Person): void。

我已经尝试了所有我能想到的 ajax url 的不同选项,但没有成功。有人可以告诉我我做错了什么吗?

编辑:添加 RouteConfig

        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 }
        );
    }

最佳答案

有几个问题:

  1. Controller 中的操作是静态的。

  2. Controller 中的操作是私有(private)的,而不是公开的。

  3. 您使用的路由指向错误的端点(使用路由调试器或 API 帮助来查看正确的端点)。

需要考虑的一些更新:

public class RegController : ApiController
{
   //now insert  these values into the DB
    public void addUser(Person item)
    {
            ...

    }

    public class Person
   {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }

}

对于 jquery 请求:

var insertNewUser = function () {

    var person = new Person();
    var url = "/api/Reg"
    $.ajax({
        url: url,
       type: 'post',
        data: person,
        contentType: "application/json; charset=utf-8",
        success: function (result) {
        }
    })
};

假设这是一个普通的 Web API v2 应用程序,如果您运行 Web 应用程序并单击 API 链接,它将显示您的路由是如何配置的。

旁注:我发现在调试 Web api 以利用以下包时很有用:

Install-Package WebApiRouteDebugger

关于c# - Javascript ajax 调用无法访问我的 Web API Controller 页面。似乎无法获取正确的网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639656/

相关文章:

c# - 使用 MVVM 选择 ListView 中的所有项目

c# - 如何获取最大http请求长度时间?

javascript - Knockout foreach 绑定(bind)中的 Bootstrap 弹出窗口

javascript - 在一行后面滑动多个 div 时出现屏蔽问题

jquery - 使用 jquery 为有 child 的 parent 添加类

JavaScript 不适用于动态内容

c# - 在 asp.net MVC4 应用程序中使用 MVCMailer,在发送电子邮件时不断出现错误

C# - 在数据中使用转义管道拆分管道?

javascript - 在 Highcharts 中,我们能够以 'dashed' 风格制作金字塔的边框吗?

javascript - Modernizr 和 fonts.com 导致 IE8 崩溃