在 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"}
};