在 ajax 发布后检索数据时 Http 404(使用 Web API)

本文关键字:使用 Web API Http ajax 数据 检索 | 更新日期: 2023-09-27 18:36:36

我开始使用 asp.net,Ajax/jquery和Web API。

我写了一个非常基本的Web应用程序,只是为了了解发生了什么:

这里是模型:

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

我的问题是关于在成功的开机自检调用后使用 GET。假设我已经触发了 post 方法,并且控制器成功地将一个新的作者(如 {"Id":"3"、"姓名":"汤姆"、"姓氏:"Cruise"})添加到作者列表(我正在控制器的 Post 方法中检查列表每个作者的控制台详细信息)。现在,如果我尝试像"api/authors/3"这样的 GET,我会得到一个 HTTP 404,而带有 uri 'api/authors/1' 或 'api/authors/2' 的 GET 会给出 HTTP 200。谁能解释一下为什么服务器在尝试检索成功开机自检添加的数据时给我一个 404?

在 ajax 发布后检索数据时 Http 404(使用 Web API)

为每个请求实例化一个控制器。

您需要确保在所有控制器实例之间共享相同的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"}
};