我有一个有角度的客户端,正在向服务器发送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/

10-09 20:52