【问题标题】:Typescript Angular 2 Http post to C# MVCTypescript Angular 2 Http 发布到 C# MVC
【发布时间】:2017-02-24 01:38:39
【问题描述】:

尝试通过 Typescript 服务将有效负载传递给 http.post

我的 .ts 代码:

saveEdits(body: Object): Observable<Animal[]> {
    let bodyString = JSON.stringify(body); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.UrlToEdit, body, options)
        .map((res: Response) => res.json())
        .catch((error: any) => console.log("Edited value did not been saved"));
}

提到

private UrlToEdit = '/Home/Edit';

虽然值取决于服务,但 C# 控制器似乎没有启动。这里是它的代码:

[HttpPost]
public  async Task<Boolean> Edit([Bind(Include = "animalID,animalName,animalHabitat,animalClass")] Animal animal)
{
   if (ModelState.IsValid)
   {
      db.Entry(animal).State = EntityState.Modified;
      await db.SaveChangesAsync();
      return true;
   }
   return false;
}

【问题讨论】:

  • 你能确保数据出现在 Fiddler 中吗?你能在 Fiddler 和 Animal 类中显示有效载荷吗?
  • 数据确实呈现给 Fiddler。虽然,类是export class Animal { animalID: number; animalName: string; animalHabitat: string; animalClass: string; }
  • 能否将[Bind(Include = "animalID,...,animalClass")] 替换为[FromBody],然后重试?
  • 对 [FromBody] 感到困惑

标签: c# angularjs typescript


【解决方案1】:

我不知道你的整个网站是如何运作的,但也许这对你有帮助:

首先我在您的代码中看到一个错误,您应该在帖子中传递 bodyString 而不是正文

return this.http.post(this.UrlToEdit, bodyString, options)
    .map((res: Response) => res.json())
    .catch((error: any) => console.log("Edited value did not been saved"));

第二个帖子返回一个 Observable,所以当有人像这样订阅 observable 时,帖子就会被执行

//...somewhere in your code ...
service.saveEdits(body).subscribe((animals: Animal[]) => console.log(animals));

同时打开 chrome 调试器(或您使用的任何浏览器)并在网络选项卡中查看帖子是否已执行以及是否有任何错误

希望对你有帮助

【讨论】:

猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2017-01-23
  • 2017-08-05
  • 2018-06-04
相关资源
最近更新 更多