Javascript ajax调用无法访问我的Web API控制器页面。似乎无法得到正确的网址

时间:2014-07-08 18:56:51

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

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

 <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文件中也有一个断点,但它不会被击中。这让我相信它永远不会进入我的控制器。我的控制器看起来像这样:

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&gt; RegController&gt;人&gt; 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 个答案:

答案 0 :(得分:1)

有几个问题:

  1. 控制器中的操作是静态的。

  2. 您的控制器中的操作是私有的,而不是公开的。

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

  4. 需要考虑的一些更新:

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

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

    附注:我发现在调试web api时使用以下软件包非常有用:

    Install-Package WebApiRouteDebugger