ASP.NET WebApi mit JSON-Antwort, und Personen mit ausländischer Schlüssel
Arbeite ich an WebApi-Projekt und ich habe 2 Personen in meinem domain:
Street
public class Street
{
public int ID { get; set; }
public string Name { get; set; }
public int StreetTypeID { get; set; }
public virtual StreetType StreetType { get; set; }
}
und StreetType:
public class StreetType
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
Benutze ich FluenApi zum anzeigen der folgenden Elemente:
public class StreetTypeMap : EntityTypeConfiguration<StreetType>
{
public StreetTypeMap()
{
HasKey(t => t.ID);
Property(t => t.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(t => t.Name).IsRequired().HasMaxLength(50);
HasMany(a => a.Streets).WithRequired(p => p.StreetType).HasForeignKey(p => p.StreetTypeID);
ToTable("StreetType");
}
}
und ähnlich wie der Street-Einheit.
Jetzt bekomme ich JSON:
{
"id":1,
"name":"Street1",
"streettypeid":3
}
Wie bekomme ich die JSON wie:
{
"id":1,
"name":"Street1",
"streettypeid":
{
"id":3,
"name":"Type3"
}
}
Oder eine ähnliche Struktur. Wie kann ich dies in .NET?
Mein Controller:
StreetController : BaseApiController<Street>
und
public class BaseApiController<T> : ApiController where T : BaseEntity
{
protected UnitOfWork unitOfWork = new UnitOfWork();
protected IRepository<T> repository;
public BaseApiController()
{
repository = unitOfWork.EFRepository<T>();
}
public virtual IQueryable<T> Get()
{
var entity = repository.Table;
if (entity == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NoContent));
}
return entity;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewahren Objektreferenzen in JSON, fügen Sie den folgenden code, um Application_Start-Methode in der Global.asax-Datei:
Weitere datail bitte Lesen Sie diese Artikel.
Andere Möglichkeit ist zu versuchen, zu verwenden OData in Ihrem webapi.
Sie müssen installieren Sie die OData-Pakete:
Dann werden Sie in der Lage, yo verwenden
$expand
verursacht Verwandte Personen aufgenommen werden inline in der Antwort.Sie können lassen Sie alles wie es ist, aber ich denke, es wird richtig hinzufügen
IgnoreDataMember
(vergessen Sie nicht, fügen Sieusing System.Runtime.Serialization
😉Müssen auch Sie dann auf Attribut hinzufügen, um Sie
Get
Methode:Danach können Sie erstellen, die http-request wie:
bekommen und alle
Streets
mit IhrenStreetType
Could not find a property named 'StreetTypes' on type 'Domain.Entities.Street'."
http://mysite/Street?$expand=StreetTypes
$expand=StreetTypes
? Es gibt keine Eigenschaft mit dem Namen StreetTypes. In IhremStreet
Klasse existiertpublic virtual StreetType StreetType { get; set; }
. Also, Sie haben zu verwendenhttp://mysite/Street?$expand=StreetType
Müssen Sie eine Ansicht erstellen, Modell zurück, das die Entität enthalten.
Edit: hier ist eine komplette api-controller-Methode, einschließlich der vorgeschlagenen route.
IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
GetEntity<T>
im code. Danke und sorry.Select(viewModel...
weil Non-invocable Mitglied kann nicht verwendet werden, wie eine Methode?public virtual StreetType StreetType { get; set; }
und ich nicht verwenden.Select(viewModel