Ich muss zu einem Api Controller w/JSON (vorzugsweise) mit ONE Anfrage.Post JSON mit Daten UND Datei zu Web Api - jQuery/MVC
Das Problem besteht darin, Daten UND eine Datei (Bild hochgeladen) zu übergeben. Mein Eigentum steht leer (null).
Ich habe mir ziemlich viele Blogs angeschaut, aber ich kann nicht scheinen, dass die Bilddaten übertragen werden.
public class SomeModel
{
public string Name { get; set; }
public string Email { get; set; }
public string City { get; set; }
public HttpPostedFileBase Image { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string CountryCode { get; set; }
}
[HttpPost]
public void CreateContestEntry(SomeModel model)
{
// model.Image is always null
// .. get image here - the other properties no issues
}
jQuery
// create model for controller
var model = {
Name: $.trim($contestForm.find('[name="nombre"]').val()) + ' ' + $.trim($contestForm.find('[name="apellido"]').val()),
Email: $.trim($contestForm.find('[name="email"]').val().toLowerCase()),
City: $.trim($contestForm.find('[name="cuidad"]').val()),
Title: $.trim($contestForm.find('[name="title"]').val()),
Description: $.trim($contestForm.find('[name="description"]').val()),
CountryCode: 'co',
Image: $contestForm.find('[name="file-es"]')[0].files[0] // this has the file for sure
};
$.ajax({
url: '/Umbraco/api/ControllerName/CreateContestEntry',
type: 'POST',
dataType: 'json',
data: JSON.stringify(model),
//data: $('#test-form').serialize(), // tried this and using FormData()
processData: false,
async: false,
contentType: 'application/json; charset=utf-8',
complete: function (data) {
},
error: function (response) {
console.log(response.responseText);
}
});
Blogs Ich habe betrachtet:
- File Upload with Additonal Form Data to Web Api from MVC
- http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-1
- http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2
- Custom form data with multiple files to Web API controller
Als ich die FormData
und $('#form1').serialize()
Ansatz versucht, meine provider.FileData
und provider.FormData
immer auch leer waren. Ich entfernte den model
Parameter von der Methode und die Unterbrechungspunkte trafen, als ich ihn schaltete.
[HttpPost]
public void CreateContestEntry()
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
// Read the form data.
Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
// empty
}
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
// empty
}
}
//return Request.CreateResponse(HttpStatusCode.OK);
}
catch(Exception ex)
{
}
}
LÖSUNG:
abgehend von @ Musa Antwort, hier ist der Api-Code-Controller. Ich habe die NameValueCollection meinem Modell zugeordnet.
Erhalten Sie weiterhin Fehler auf 'var model = new FormData();' Uncaught TypeError: Objekt ist keine Funktion. Und ja, ich habe mein vorheriges Modellobjekt auskommentiert, also habe ich die Variable nicht dupliziert. –
Welchen Browser benutzen Sie? Haben Sie FormData irgendwo anders in Ihrem Code definiert? – Musa
Chrome - fügen Sie diese js-Datei ist riesig - nach 'FormData()' gesucht und es erscheint ein paar Mal, aber für andere Variablen an anderer Stelle definiert. Keine Methoden heißen, dass entweder –