我正在尝试使用 Html2 input type="file"和 angular2 http.post 请求上传文件。当请求到达 web api 时,它在
Request.Content.IsMimeMultipartContent()
当使用 Postman 提交请求时,它不会失败(当我不在 header 中包含 Content-Type 时,因为 postman 会处理它)。
查看我的代码: HTML:
<input type="file" (change)="fileChange($event)" placeholder="Upload file" accept=".pdf,.doc,.docx,.dwg,.jpeg,.jpg">
服务功能:
uploadFile(event) {
let fileUploadUrl = this.webApiFileUploadURL;
let fileList: FileList = event.target.files;
if(fileList.length > 0) {
let file: File = fileList[0];
let formData:FormData = new FormData();
formData.append('uploadFile', file, file.name);
let headers = new Headers();
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers });
this._http.post(`${this.webApiFileUploadURL}`, formData, options)
.map(res => res.json())
.catch(error => Observable.throw(error))
.subscribe(
data => console.log('success'),
error => console.log(error)
)
}
WebApi 发布请求(失败于 如果 (!Request.Content.IsMimeMultipartContent()) ):
public async Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent()) // Fails here
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
最佳答案
经过深入研究 - 我成功了:
发布时无需设置内容类型标题属性。
我已经从我的 angular2 http.post 请求和
web-api post 方法中的 Request.Content.IsMimeMultipartContent() 已通过(与 postman 中相同)
关于c# - Request.Content.IsMimeMultipartContent() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48749008/