Jestem nowicjuszem ASP.net (i ogólnie programowaniem) i mam problem z budowaniem Web API. Dokładniej trzeba pomóc w tych dwóch obszarach:HTTP POST do relacji Wiele do wielu przy użyciu interfejsu ASP.NET Web API
- Jak skonfigurować mój
DOCcontroller
aby opublikować nowy dokument (tabela DOC). - Jak zrobić faktyczny wpis ajax - Mam problem z podaniem parametru
EXT_GUID
. W obecnej wersji pojawia się błąd, gdy próbuję opublikować. "Nie można powiązać wielu parametrów (doc i parentOwner) z treścią żądania."
Zasadniczo chodzi o prosty system zarządzania dokumentami. Chcę mieć dokumenty Get/Post (DOC), jeśli użytkownik dostarcza identyfikator GUID z zewnętrznej bazy danych (pole EXT_GUID) jako filtr/parametr. Każdy dokument może mieć wiele identyfikatorów EXT_GUID, a każdy EXT_GUID może mieć wiele dokumentów (DOC). Możesz założyć, że pola EXT_GUID zostaną wypełnione przed postem HTTP.
Jest to kod DOCcontroller
//POST api/DOC
public HttpResponseMessage PostDOC(DOC doc, List<string> parentOwners)
{
if (ModelState.IsValid)
{
var parents = db.BIMs.Where(bx => parentOwners.Contains(bx.EXT_GUID));
foreach (var p in parents)
doc.Owners.Add(p);
db.DOCs.Add(doc);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, doc);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = doc.Id }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
To jest mój model setup - EntityFramework codefirst rzeczy
public class EXT
{
public int Id { get; set; }
public string EXT_GUID { get; set; }
public int ProjectID { get; set; }
public virtual ICollection<DOC> DOCs { get; set; }
}
public class DOC
{
public int Id { get; set; }
public int ProjectID { get; set; }
public string Subject { get; set; }
public string Link { get; set; }
public virtual ICollection<EXT> EXTs { get; set; }
}
To więcej bagażu model ...
public StoreDBContext() : base("name=StoreDBContext")
{
}
public DbSet<EXT> EXTs { get; set; }
public DbSet<DOC> DOCs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Set FLUENT API config for many to many here
modelBuilder.Entity<EXT>()
.HasMany(a => a.DOCs)
.WithMany()
.Map(x =>
{
x.MapLeftKey("EXT_Id");
x.MapRightKey("DOC_Id");
x.ToTable("EXTsDOCs");
});
}
kod AJAX
function AddDOC() {
var parentOwner = "{\"" + $('#txtaddEXT').val() + "\"}";
jQuery.support.cors = true;
var DOC = {
ProjectId: ProjectID,
Subject: $('#txtaddDOCSubject').val(),
Link: $('#txtaddDOCLink').val(),
parentOwner: parentOwner
};
$.ajax({
url: "http://localhost:54171/api/DOC/",
type: 'POST',
data: JSON.stringify(DOC),
contentType: "application/json;charset=utf-8",
success: function (data) {
WriteResponse(data);
},
error: function (x, y, z) {
alert(x + '\n' + y + '\n' + z);
}
});
}
Więc ten facet „John Papa” miał poradnik, który wyjaśnił, co starałem się zrobić, i wiele więcej. Objaśnienie przepływu pracy było idealne dla mojego poziomu zrozumienia (i zaangażowania w uczenie się). http://pluralsight.com/training/Courses/TableOfContents/spa To sześć godzin wideo, ale warto. Możesz także pobrać kod źródłowy, jeśli zarejestrujesz się na szlaku - chociaż członkostwo jest naprawdę tego warte. –
Spójrz na następujące kwestie dotyczące problemów z wieloma parametrami POST w WebApi: http://forums.asp.net/t/1810709.aspx/1 –