我有一个有角度的客户端,正在向服务器发送HttpRequest以获取客户端信息:
getClient(roleId): Observable<ClientDto> {
let params = new HttpParams();
params = params.append('Id', clientId);
return this._httpClient.get<ClientDto>('myurl', {params});
}
在控制器上
[HttpGet]
public async Task<ActionResult<ClientDto>> GetClient(EntityDto<int> data)
{
return Ok(await clientsService.GetClient(data.Id));
}
public class EntityDto : EntityDto<int>, IEntityDto
{
public EntityDto()
{
}
public EntityDto(int id)
: base(id)
{
}
}
public class EntityDto<TKey> : IEntityDto<TKey>
{
[Required]
public TKey Id { get; set; }
public EntityDto()
{
}
public EntityDto(TKey id)
{
Id = id;
}
}
public interface IEntityDto : IEntityDto<int>
{
}
public interface IEntityDto<TKey>
{
/// <summary>
/// Id of the entity.
/// </summary>
TKey Id { get; set; }
}
当我从angular拨打电话时,我收到Http状态415响应
有谁知道为什么会这样吗?
最佳答案
我将假定您正在使用[ApiController]
,我认为您必须先使用[FromBody]
才能看到所描述的行为。使用此属性后,复杂类型的模型绑定规则将从默认值更改。
就像您在EntityDto<int>
属性上指定了[FromBody]
一样。应用Content-Type
时,模型绑定过程将查看请求随附的application/json
标头。当选择输入格式化程序时,将使用此标头的值-在最简单的级别,它将与例如转换为JSON输入格式化程序。如果标头丢失或不包含受支持的值,则会发送415不支持的媒体类型响应。
您已经知道解决方案,即使用binding-source属性覆盖推理:
public async Task<ActionResult<ClientDto>> GetClient([FromQuery] EntityDto<int> data)
我希望这个答案可以解释为什么需要这样做。
关于c# - Asp.Net httpGet获取带有复杂类型参数的调用 Controller 方法的httpstatus 415,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58298670/