在 ajax post 之后检索数据时出现 Http 404(使用 Web API)
Http 404 when retrieving data after an ajax post (using web api)
我开始使用 asp.net、ajax/jquery 和网络 api。
我写了一个非常基本的网络应用程序只是为了了解发生了什么:
这里是模型:
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
这里是控制器:
public class AuthorsController : ApiController
{
List<Author> authors = new List<Author>
{
new Author {Id=1, Name="Alan", Surname="Timo" },
new Author {Id=2, Name="Jack", Surname="Russel"}
};
[HttpGet]
public IHttpActionResult GetAuthor(int id)
{
Author autore = authors.FirstOrDefault(p => p.Id == id);
if (autore == null)
return NotFound();
else
return Ok(autore);
}
[HttpPost]
public Author PostAutore([FromBody] Author author)
{
authors.Add(author);
foreach (Author aut in authors)
{
Debug.WriteLine(aut.Id + " " + aut.Name + " " + aut.Surname);
}
return author;
}
}
这里是jquery中的get函数和post函数:
function GetAuthorById() {
var id = $('#authorID').val();
$.getJSON('api/authors/' + id).done(function (data) {
alert(data.Name + data.Surname);
});
}
function PostAuthor() {
var author = {
Id: $('#newAuthorId').val(),
Name: $('#newAuthorName').val(),
Surname: $('#newAuthorSurname').val()
};
$.post(
'api/authors',
author,
function (data) {
alert(data.Name + data.Surname);
}
);
}
我的问题是关于在 POST 调用成功后使用 GET。假设我已经触发了 post 方法并且控制器成功添加了一个新作者,例如 {"Id":"3", "Name":"Tom", "Surname": "Cruise"} 到作者列表(我正在控制器的 Post 方法中检查列表中每个作者的控制台详细信息)。现在,如果我尝试像 'api/authors/3' 这样的 GET,我得到一个 HTTP 404,而带有 uri 'api/authors/1' 或 'api/authors/2' 的 GET 给出一个 HTTP 200。谁能解释我为什么服务器给我一个 404尝试检索成功添加的数据时 POST?
为每个请求实例化一个控制器。
您需要通过使 authors
字段 static
像这样确保在所有控制器实例之间共享相同的 authors
实例:
static List<Author> authors = new List<Author>
{
new Author {Id=1, Name="Alan", Surname="Timo" },
new Author {Id=2, Name="Jack", Surname="Russel"}
};
我开始使用 asp.net、ajax/jquery 和网络 api。
我写了一个非常基本的网络应用程序只是为了了解发生了什么:
这里是模型:
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
这里是控制器:
public class AuthorsController : ApiController
{
List<Author> authors = new List<Author>
{
new Author {Id=1, Name="Alan", Surname="Timo" },
new Author {Id=2, Name="Jack", Surname="Russel"}
};
[HttpGet]
public IHttpActionResult GetAuthor(int id)
{
Author autore = authors.FirstOrDefault(p => p.Id == id);
if (autore == null)
return NotFound();
else
return Ok(autore);
}
[HttpPost]
public Author PostAutore([FromBody] Author author)
{
authors.Add(author);
foreach (Author aut in authors)
{
Debug.WriteLine(aut.Id + " " + aut.Name + " " + aut.Surname);
}
return author;
}
}
这里是jquery中的get函数和post函数:
function GetAuthorById() {
var id = $('#authorID').val();
$.getJSON('api/authors/' + id).done(function (data) {
alert(data.Name + data.Surname);
});
}
function PostAuthor() {
var author = {
Id: $('#newAuthorId').val(),
Name: $('#newAuthorName').val(),
Surname: $('#newAuthorSurname').val()
};
$.post(
'api/authors',
author,
function (data) {
alert(data.Name + data.Surname);
}
);
}
我的问题是关于在 POST 调用成功后使用 GET。假设我已经触发了 post 方法并且控制器成功添加了一个新作者,例如 {"Id":"3", "Name":"Tom", "Surname": "Cruise"} 到作者列表(我正在控制器的 Post 方法中检查列表中每个作者的控制台详细信息)。现在,如果我尝试像 'api/authors/3' 这样的 GET,我得到一个 HTTP 404,而带有 uri 'api/authors/1' 或 'api/authors/2' 的 GET 给出一个 HTTP 200。谁能解释我为什么服务器给我一个 404尝试检索成功添加的数据时 POST?
为每个请求实例化一个控制器。
您需要通过使 authors
字段 static
像这样确保在所有控制器实例之间共享相同的 authors
实例:
static List<Author> authors = new List<Author>
{
new Author {Id=1, Name="Alan", Surname="Timo" },
new Author {Id=2, Name="Jack", Surname="Russel"}
};