因此,在我的 Angular 前端应用程序中,我有一个表单,在打字稿文件中,我创建了一个新的 formdata 对象并将项目附加到它,如下所示:
public postFormData() {
const form = $('#customListForm')[0];
const formData = new FormData();
formData.append('tenant', form[0].value);
formData.append('username', form[1].value);
formData.append('password', form[2].value);
formData.append('CL_title', form[3].value);
formData.append('CL_description', form[4].value);
formData.append('CL_contentType', form[5].value);
formData.append('CL_template', form[6].value);
this.http.post(this.apiURL, formData).catch(this.errorHandler).subscribe(res => this.formPosted(res));
// this.http.get(this.apiURL).catch(this.errorHandler).subscribe(res => this.formPosted(res));
}
最后,我的 formData 填写正确。现在,当我尝试将其发布到我的 ASP.NET 4.6.1 Web API 时,它给了我以下错误:
POST http://localhost:52613/api/customlist 415 (Unsupported Media Type)
在这里你可以看到我的 API 代码:
// POST api/customlist
[HttpPost]
public System.Web.Http.IHttpActionResult Post(CustomList data)
{
var test = HttpContext.Current.Request;
var testje = data;
return Ok("POST all good");
}
我假设“CustomList 数据”是错误的?我喜欢的是 formData 绑定到我的模型,我的模型具有与您在此处看到的相同的字段:
public class CustomList
{
public string Tenant { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string CL_title { get; set; }
public string CL_description { get; set; }
public string CL_contentType { get; set; }
public string CL_template { get; set; }
}
在我的标题中,我可以看到以下内容:
Response Headers: Content-Type: application/json
Request Headers: Content-Type: multipart/form-data
这可能是问题吗?
这是奇怪的部分:我之前也创建了一个 .NET Core 2 Web API,我的发布操作看起来像这样(忽略文件内容):
// POST api/input
[HttpPost]
public async Task<IActionResult> Post(SPInputObject data)
{
var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
string filePath = Path.Combine(uploads, data.File.FileName);
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
if (data.File.Length > 0)
{
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await data.File.CopyToAsync(fileStream);
}
}
ProvisioningService service = new ProvisioningService();
service.CreateSiteCollection(data.Tenant, data.Title, filePath);
return Ok("POST all good");
}
当我将我的 SAME Angular 表单/表单数据发布到此 api 控制器 + 操作时,它将进入 POST .... 那么为什么可以将其发送到我的 .NET Core 2 Web API 而不是我的 ASP.NET 4.6.1 Web应用程序接口?
有谁知道可能是什么问题?
编辑:尝试将内容类型添加到我的前端 Angular 请求不起作用,这是我尝试过的:
private httpOptions = {
headers: new Headers({
'Content-Type': 'application/json'
})
};
修改我的 http 帖子(我添加了 this.httpOptions):
this.http.post(this.apiURL, formData,
this.httpOptions).catch(this.errorHandler).subscribe(res =>
this.formPosted(res));
然后它在我的 this.httpOptions 上给出以下错误:
"message": "Argument of type '{ headers: Headers; }' is not assignable to parameter of type 'RequestOptionsArgs'.\n Types of property 'headers' are incompatible.\n Type 'Headers' is not assignable to type 'Headers'. Two different types with this name exist, but they are unrelated.\n Property 'keys' is missing in type 'Headers'."