我开始使用asp.net,ajax / jquery和web 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方法,并且控制器成功添加了一个新的作者,如{&#34; Id&#34;:&#34; 3&#34;,&#34; Name&#34;:& #34; Tom&#34;,&#34; Surname&#34;:&#34; Cruise&#34;}到作者列表(我正在检查这个记录在Post的列表中每个作者的控制台详细信息控制器的方法)。现在,如果我尝试GET,例如&#39; api / authors / 3&#39;我得到了一个HTTP 404,而与Uri&#39; api / authors / 1&#39;或者&#39; api / authors / 2&#39;提供HTTP 200.任何人都可以解释一下为什么服务器在尝试检索成功POST时添加的数据时会给我404?
答案 0 :(得分:3)
为每个请求实例化一个控制器。
您需要确保所有控制器实例共享相同的authors
实例,方法是authors
字段static
:
static List<Author> authors = new List<Author>
{
new Author {Id=1, Name="Alan", Surname="Timo" },
new Author {Id=2, Name="Jack", Surname="Russel"}
};