【问题标题】:Cant pass parameter to API无法将参数传递给 API
【发布时间】:2019-11-20 22:47:22
【问题描述】:

我正在运行具有此操作的 REST API 服务:

    [HttpPost]
    public FooResponse DoFoo(FooRequest request)
    //public FooResponse DoFoo([FromBody] FooRequest request)
    {
        return null;
    }

我的要求:

public class FooRequest
{
    public string FooId;
}

我有一个 Angular 客户端,正在拨打这个电话:

startFoo(fooId: string)
{
const url = `${this.baseUrl}StartFoo`;
const params = new HttpParams()
.set('FooId', fooId);
console.log(`params : ${params}`);

const result = this.httpClient.post<fooItem>(url, {params}).toPromise();
return result;
}

当我从 PostMan 调用时,会填充 FooId,当我从 Angular 调用它时,会命中端点,但参数始终为空。当我查看控制台日志时,参数就在那里。

我尝试了this 解决方案,但它没有解决我的问题。

我错过了什么?

【问题讨论】:

  • 尝试将 set() 远离实例化 ` const params = new HttpParams(); params.set('FooId', fooId);`
  • @Leandro,同样的结果。
  • 您不想在您的情况下使用HttpParams,您正在寻找FooRequest,因此构建类似的对象并将其传入假设它只是Id,只需传入@ 987654328@ 并在您的操作中使用[FromBody]
  • 您应该在浏览器的开发工具、网络选项卡中查看您的请求的详细信息。可以查看你的参数是否发送。
  • params 不适用于有效载荷。用于url的参数

标签: c# angular typescript rest


【解决方案1】:

您应该在方法中添加 [FromBody] 属性。

  [HttpPost]
  public FooResponse DoFoo([FromBody] FooRequest request)
    {
        return null;
    }

当您向 api 发送请求时,您的请求正文必须是 json 格式。

var fooRequest = { FooId : 1};


const result = this.httpClient.post<fooItem>(url, JSON.stringify(fooRequest) ).toPromise();

我没有尝试,我想它会工作。

【讨论】:

  • 你不需要使用JSON.stringify
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2020-05-15
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多