Javascript getJSON函数,查询linq返回的列表;“未定义”;

Javascript getJSON函数,查询linq返回的列表;“未定义”;,javascript,c#,linq,asp.net-web-api,getjson,Javascript,C#,Linq,Asp.net Web Api,Getjson,我实际上是想了解一点ASP.NETWebAPI。我想查询ArtistController类中包含的艺术家列表 这是前端的屏幕截图 这是我的控制器 public class ArtistsController : ApiController { Artist[] artists = new Artist[] { new Artist { Name = "Metallica",Id ="65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab",Co

我实际上是想了解一点ASP.NETWebAPI。我想查询ArtistController类中包含的艺术家列表

这是前端的屏幕截图

这是我的控制器

public class ArtistsController : ApiController
{
    Artist[] artists = new Artist[]
    {
        new Artist { Name = "Metallica",Id ="65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab",Country ="US",Aliases ="Metalica" },
        new Artist { Name = "Lady Gaga",Id ="650e7db6-b795-4eb5-a702-5ea2fc46c848",Country ="US",Aliases ="Lady Ga Ga,Stefani Joanne Angelina Germanotta" },
        new Artist { Name = "Mumford & Sons",Id ="c44e9c22-ef82-4a77-9bcd-af6c958446d6",Country ="GB",Aliases ="" },
        new Artist { Name = "Mott the Hoople",Id ="435f1441-0f43-479d-92db-a506449a686b",Country ="GB",Aliases ="Mott The Hoppie,Mott The Hopple" },
        new Artist { Name = "Megadeth",Id ="a9044915-8be3-4c7e-b11f-9e2d2ea0a91e",Country ="US",Aliases ="Megadeath" },
        new Artist { Name = "John Coltrane",Id ="b625448e-bf4a-41c3-a421-72ad46cdb831",Country ="US",Aliases ="John Coltraine,John William Coltrane" }
    }
    };

    public IEnumerable<Artist> GetAllArtists()
    {
        return artists;
    }

    public IHttpActionResult GetArtist(string name)
    {
        //IEnumerable<Artist> ArtistQuery = (from Artist in artists
        //                                  where Artist.Name.Contains(name)
        //                                  select Artist).ToList();
        IEnumerable<Artist> ArtistQuery = from Artist in artists
                                          where Artist.Name.Contains(name)
                                          select Artist;
        if (ArtistQuery == null)
        {
            return NotFound();
        }
        return Ok(ArtistQuery);
    }
}
下面是WEAPI配置

public static void Register(HttpConfiguration config) { 
    // Web API configuration and services // Web API routes 
    config.MapHttpAttributeRoutes(); 
    config.Routes.MapHttpRoute( 
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
    ); 
}
我收到一个错误“未定义”“未定义”

后端没有编译错误

Chrome控制台中也没有javascript错误


谢谢你的帮助

您的
formatItem
的javascript需要一个项目
Artist

 function formatItem(item) { return item.Name + ' ' + item.Country; }
但是您的
GetArtist
正在返回一个
IEnumerable
,这将解释为什么您会看到
undefined-undefined

要么从
GetArtist

public IHttpActionResult GetArtist(string name) {       
    IEnumerable<Artist> ArtistQuery = from Artist in artists
                                      where Artist.Name.Contains(name)
                                      select Artist;
    if (ArtistQuery.Count() == 0) {
        return NotFound();
    }
    return Ok(ArtistQuery.First());
}

formatItem(数据)
有什么作用?有函数formatItem(item){return item.Name+''+item.Country;}如果您使用Fiddler调用API端点with Postman,它会将输出显示为“艺术家名称”“国家”,您从API返回了有效的结果吗?jquery.getJson可以工作并发送所有艺术家,如下所示:var uri='API/artists'$(document).ready(函数(){//发送AJAX请求$.getJSON(uri).done(函数(数据){//成功时,“数据”包含艺术家列表。$。每个(数据、函数(键、项){//为产品添加列表项。$(“
  • ”,{text:formatItem(项)})。附录($(“#艺术家”)); }); }); });当我在《邮递员》中这样做时,我正确地得到了JSON格式的艺术家列表。[{“名称”:“Metallica”,“Id”:“65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab”,“国家”:“美国”,“别名”:“Metalica”},…]如果我从ur代码执行此操作,“var artist=data[0]”;它将只返回列表中的第一项“Metallica US”。我怎样才能找到所有与名字匹配的艺术家?使用正则表达式??现在它显示所有的名称:)为了让它工作,它缺少了一个“)”。给你。完成(函数(数据){if(数据){$.each(数据,函数(键,项){//将找到的美工人员的列表项添加到美工人员。$(“
  • ”,{text:formatItem(项)})。附录($(“#美工人员”);})如果它显示全部,则意味着它正在点击
    GetAllArtists
    。您是如何配置路由的。更新您的问题以显示apipublic静态无效寄存器(HttpConfiguration config){//Web API配置和服务//Web API routes config.mapHttpAttribute路由();config.routes.MapHttpRoute(名称:“DefaultApi”,routeTemplate:“api/{controller}/{id}”,默认值:new{id=RouteParameter.Optional};}您需要将此类信息添加到原始帖子中。你可以编辑它。我现在就添加它。
    public IHttpActionResult GetArtist(string name) {       
        IEnumerable<Artist> ArtistQuery = from Artist in artists
                                          where Artist.Name.Contains(name)
                                          select Artist;
        if (ArtistQuery.Count() == 0) {
            return NotFound();
        }
        return Ok(ArtistQuery.First());
    }
    
    function find() {
        $.getJSON(uri + '/' + name) //This should resolve to you web api endpoint `api/artists/getartist/{name}`
        .done(function (data) {
            if(data) {
                $.each(data, function (key, item)) { 
                    // Add a list item for the found artists to artist. 
                    $('<li>', { text: formatItem(item) }).appendTo($('#artist'));
                }
            }
        })
        .fail(function (jqXHR,textStatus,err)
        {
            $('#artist').text('Error : ' + err);
        });
    
    }
    
    [RoutePrefix("api/artists")]
    public class ArtistsController : ApiController
    {
        Artist[] artists = new Artist[]
        {
            new Artist { Name = "Metallica",Id ="65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab",Country ="US",Aliases ="Metalica" },
            new Artist { Name = "Lady Gaga",Id ="650e7db6-b795-4eb5-a702-5ea2fc46c848",Country ="US",Aliases ="Lady Ga Ga,Stefani Joanne Angelina Germanotta" },
            new Artist { Name = "Mumford & Sons",Id ="c44e9c22-ef82-4a77-9bcd-af6c958446d6",Country ="GB",Aliases ="" },
            new Artist { Name = "Mott the Hoople",Id ="435f1441-0f43-479d-92db-a506449a686b",Country ="GB",Aliases ="Mott The Hoppie,Mott The Hopple" },
            new Artist { Name = "Megadeth",Id ="a9044915-8be3-4c7e-b11f-9e2d2ea0a91e",Country ="US",Aliases ="Megadeath" },
            new Artist { Name = "John Coltrane",Id ="b625448e-bf4a-41c3-a421-72ad46cdb831",Country ="US",Aliases ="John Coltraine,John William Coltrane" }
        }
        };
        // GET api/artists
        [HttpGet]
        [Route("")]
        public IEnumerable<Artist> GetAllArtists()
        {
            return artists;
        }
    
        // GET api/artists/John
        [HttpGet]
        [Route("{name}")]
        public IHttpActionResult GetArtist(string name)
        {        
            IEnumerable<Artist> ArtistQuery = from Artist in artists
                                              where Artist.Name.Contains(name)
                                              select Artist;
            if (ArtistQuery == null)
            {
                return NotFound();
            }
            return Ok(ArtistQuery);
        }
    }