我有一个注册页面,我正在尝试将输入字段保存到“用户”表中的新记录中。
<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 }
);
}
最佳答案
有几个问题:
Controller 中的操作是静态的。
Controller 中的操作是私有(private)的,而不是公开的。
您使用的路由指向错误的端点(使用路由调试器或 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/