我看到很多WebAPI接受文件的例子。然而,我還沒有找到一個解決方案,爲什麼,無論我嘗試過什麼,都要讓我的HttpContext.Current.Request.Files有一個文件,通過Postman發佈到Web API。 (我也通過控制檯應用程序發佈了該圖像並得到了相同的結果)HttpContext.Current.Request.Files始終是空的
[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));
}
這是一個非常簡單的方法。我一直在使用郵遞員發佈二進制.jpg文件。我已經設置了content-type =「multipart/form-data」。沒有錯誤拋出我的代碼,除了.Files = 0.
我在我的WebApiConfig中的其他API的一些額外的設置,但我會包括他們以防萬一,以及路由這種特殊的方法:
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) }
);
我在機智的一端試圖弄清楚爲什麼這麼簡單,只是不起作用。我已經嘗試了很多其他的方式來做這件事,那些MVC類似,但這不是一個MVC應用程序,他們拋出了不同的錯誤。謝謝你的幫助。
您是使用'form-data'單選按鈕還是隻設置'content-type'標題? –
我正在使用二進制單選按鈕,並選擇本地驅動器上的.jpg文件。我還設置了內容類型標題。 –
我還創建了一個全新的Web API,並使用內置的默認ValuesController並試圖向其發佈圖像,並導致相同的問題。 –