Ich sehe viele Beispiele für WebAPIs Dateien akzeptieren. Wie auch immer, ich muss immer noch eine Lösung finden, warum, egal was ich versucht habe, meine HttpContext.Current.Request.Files jemals eine Datei darin haben, die ich über Postman in die Web API poste. (Ich habe dieses Bild auch über eine Konsolenanwendung gepostet und habe das gleiche Ergebnis erhalten)HttpContext.Current.Request.Files ist immer leer
[HttpPost]
[ActionName("Post")]
[ResponseType(typeof(PeliquinApiRsp))]
public IHttpActionResult Post(int personId)
{
var empPicture = PeliquinIOC.Resolve<IEmpPictureBL>(UserId, UserName, PropertyCode);
if (!(IsAllowed(SysPrivConstants.SYSPRIV__TYPE_PERSONNEL, SysPrivConstants.SYSPRIV__FUNC_PERSONNEL_CARDHOLDER, SysPrivConstants.SYSPRIV__LEVEL_FULL)))
return (Unauthorized());
var apiRsp = new PeliquinApiRsp();
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count == 0)
return BadRequest();
empPicture.Post(httpRequest.Files[0].InputStream, personId);
apiRsp.SetStatus();
apiRsp.SetData("EmpPicture");
return (Ok(apiRsp));
}
Es ist eine sehr einfache Methode. Ich habe Postman verwendet, um eine binäre JPG-Datei zu veröffentlichen. Ich habe den content-type = "multipart/form-data" gesetzt. Kein Fehler ist in meinem Code, anders als die .Files = 0.
Ich habe einige zusätzliche Einstellungen in meiner WebApiConfig für den Rest der API, aber ich werde sie nur für den Fall, zusammen mit der Route für diese spezielle Methode:
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));
config.Routes.MapHttpRoute(
name: "EmpPicturePost",
routeTemplate: "api/EmpPicture/{personId}",
defaults: new { controller = "EmpPicture", action = "Post" },
constraints: new { personId = @"^\d+$", httpMethod = new HttpMethodConstraint(HttpMethod.Post, HttpMethod.Options) }
);
ich auf Latein am Ende bin versucht, warum etwas so einfach, herauszufinden, funktioniert einfach nicht. Ich habe schon einige andere Methoden ausprobiert, die alle mehr MVC-ähnlich sind, aber das ist keine MVC-App, und sie haben verschiedene Fehler geworfen. Danke für jede Hilfe.
Verwenden Sie den Radioknopf 'form-data' oder legen Sie einfach einen 'content-type'-Header fest? –
Ich benutze die binäre Optionsschaltfläche und wähle eine JPG-Datei auf meinem lokalen Laufwerk. Ich setze auch den Content-Type-Header. –
Ich habe auch eine brandneue Web-API erstellt und den voreingestellten ValuesController verwendet und versucht, ein Bild an sie zu senden, was zu dem gleichen Problem führte. –