我工作在一个。Net Core Web Api和Angular应用程序。我创建了一个控制器,它将图像链接到数据库中的一个项目:
[HttpPut("[Action]/{id}")]
public async Task<ActionResult<Item>> LinkItemToIcon(int id, IFormFile file)
{
var items = await _context.Items.FirstOrDefaultAsync(t => t.Id == id);
if (items == null)
{
return BadRequest("item null");
}
if (file.Length <= 0)
{
return BadRequest("fileEmpty");
}
using (var memoryStream = new MemoryStream())
{
await file.CopyToAsync(memoryStream);
Item item = new Item() { Id = items.Id, Icon = memoryStream.ToArray() };
_context.Entry(items).CurrentValues.SetValues(item);
_context.SaveChanges();
return Ok(file);
}
}
它在Postman中运行良好,但当我想使用控制器时,我得到一个错误:
Headers:HttpHeaders{normalizedNames:Map(0),lazyUpdate:null,Headers:Map(0)}消息:“的Http失败响应https://localhost:5001/api/LinkItemToIcon:415不支持的媒体类型“
名称:“HttpErrorResponse”
确定:错误
状态:415
状态文本:“不支持的媒体类型”
url:https://localhost:5001/api/LinkItemToIcon"
你可以在我的角应用程序中看到我的html:
<input type="file" (change)="onSelectedFile($event) name="file">
<input type="button" (click)="linkItem()">
您可以看到我的组件:
this.selectedFile : File = null ;
onSelectedFile(e){
this.selectedFile = e.target.files[0]
}
LinkItem(){
var formData = new FormData();
formData.append("file",this.selectedFile, this.selectedFile.name)
this.administrator.LinkItemToIcon(1,formData).subscribe(
r => console.log(r),
err => console.log(err)
)
}
现在我的服务是:
LinkItemToIcon(id,file){
return this.http.put<UploadFile>(`${this.config.catchApiUrl()}Item/LinkItemToIcon/`+ id, file
,{
headers : new HttpHeaders({
'Content-Type' : 'application/json'
})}
)
}
我的断点结果:
谢谢你的帮助。断点结果
当我想订阅LinkItemToIcon时,我有一个错误消息
FormData未定义
此外,我可以在代码中更改我的内容类型,即应用程序/json到多部分/表单数据,因为我有一个
放https://localhost:5001/api/Item/LinkItemToIcon/1500(内部服务器错误)
CORS策略阻止了从https://localhost:5001/api/Item/LinkItemToIcon/1http://localhost:4200对XMLHttpRequest的访问:请求的资源上不存在访问控制允许起源标头。
HttpErrorResponse
您必须通过javascript/Angular发送吗?有一种简单得多的方式可以直接从表格中发送:
<form id="yourid" action=".../yourpath/LinkItemToIcon" method="PUT" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="id" value="yourID"/>
<button type="submit">
<span>Submit</span>
</button>
</form>
如果传递的id有问题,可以通过属性路由传递
按照以下步骤进行工作演示:
>
控制器
[HttpPut("[Action]/{id}")]
public async Task<ActionResult> LinkItemToIcon(int id, IFormFile file)
{
//your operation
}
Angular
selectedFile : File = null;
onSelectedFile(e){
this.selectedFile = e.target.files[0];
}
linkItem(){
var formData = new FormData();
formData.append("file", this.selectedFile, this.selectedFile.name)
this.LinkItemToIcon(1, formData).subscribe(
r => console.log(r),
err => console.log(err)
)
}
LinkItemToIcon(id, formData) {
return this.http.put(`api/SampleData/LinkItemToIcon/` + id, formData);
}
我的理解是我需要泽西-媒体-多部分依赖 当我尝试发出post请求时,我得到一个415不受支持的媒体类型错误,我不确定为什么。它被设置为消耗MULTIPART_FORM_DATA,参数是一个multipartfile。 编辑我添加了如下配置, 现在我得到了 这里是我的Spring Boot类,它包含附加配置
我知道已经有一个类似的问题,但它没有解决上述错误。 这是我在API控制器中的PUT操作,在中运行良好: 以下是我的网页上的代码: HTML 打字稿 我的服务是: 我还使用了尝试上述问题的答案,我将我的文件附加到中,但不幸的是,同样的错误。如果媒体类型中没有任何设置,如何修复此问题?
问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道
我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。
问题内容: 我正在尝试使用jQuery 1.6(Jackson 2.1.1 和Spring 3.2.0 )通过JSON通过该方法向数据库中插入和/或更新数据。 JS代码如下。 通过URL映射的Spring控制器内部的方法如下。 服务器按照问题的含义进行响应, 415不支持的媒体类型 标头信息如下所示。 整个文件如下。 当我删除一个方法参数并仅用于接受请求参数时,它可以工作。 问题答案: 浏览器发送
问题内容: 我正在使用Spring 3.2,并尝试使用ajax发布请求来提交json对象数组。如果相关,我转义了所有特殊字符。 我的HTTP状态为415。 我的控制器是: jQuery是: 我发布的数组中的对象之一的示例是以下json: 错误是: 为什么会发生此错误-有人知道吗? 问题答案: 您可以尝试使用。它没有任何问题