2013-11-09 5 views
2

Я пытаюсь следовать учебному пособию и создавать приложение. Я пытаюсь сделать запрос Get для получения списка книг. Это мой контроллер:Контроллер WebApi возвращает пустые данные

public class BooksController : ApiController 
{ 
    Book[] books = new Book[] 
    { 
     new Book(1, "Alice In Wonderland"), 
     new Book(2, "Dune"), 
     new Book(3, "Lord of the Rings") 
    }; 

    public IEnumerable<Book> Get() 
    { 
     return books; 
    } 
... 

И это моя модель:

public class Book 
{ 
    public Book() 
    { 
    } 

    public Book(int id, string name) 
    { 
     id = this.id; 
     name = this.name; 
    } 

    public int id { get; set; } 
    public string name { get; set; } 
} 

Прежде, чем я был пустой конструктор он бросает ошибку сериализации. Теперь он возвращает пустой данные:

<ArrayOfBook xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication1.Model"> 
    <Book> 
     <id>0</id> 
     <name i:nil="true"/> 
    </Book> 
    <Book> 
     <id>0</id> 
     <name i:nil="true"/> 
    </Book> 
    <Book> 
     <id>0</id> 
     <name i:nil="true"/> 
    </Book> 
</ArrayOfBook> 

Я пытался ставить точки останова в контроллере в return books и список не является то, что я жёстко, чтобы это было. Это 3 пустых объекта книги.

Я попытался добавить [Serializable] к классу книги и удалил пустой конструктор, но он все еще просто возвращает набор пустых книг. Любые идеи, что происходит?

Благодаря

ответ

1

Вы неправильные операторы присваивания в конструкторе класса Book

public Book(int id, string name) 
{ 
    id = this.id; // reverse this assignment, and the next line as well 
    name = this.name; 
} 

заменяющие с этим

public Book(int id, string name) 
{ 
    this.id = id; // this is the correct way 
    this.name = name; 
} 
+1

Я знал, что это было что-то глупо. ти – shek

0

Столкнулся с подобной проблемой. Убедитесь, что контекст, используемый в вашем контроллере, относится к правильной строке подключения.

Пример:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("MyConnStr", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 

    public System.Data.Entity.DbSet<FileUpload.Models.FileTypesView> FileTypesViews { get; set; } 
} 

    <connectionStrings> 
    <add name="MyConnStr" connectionString="data source=xxx;initial catalog=&quot;xxx&quot;;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
Смежные вопросы