如何从angular2中的组件http.post方法调用web api2控制器方法

时间:2017-10-10 09:50:00

标签: asp.net angular asp.net-web-api

Component.ts

TableHeader(Id: any) {       
  let headers = new Headers({ 'Content-Type': 'application/json' });
  let options = new RequestOptions({ headers: headers });
  let body = JSON.stringify(Id);
  var sub = this.http.post('api/Customers/GetColumnNames/', body, options)
    .map((res: Response) => res.json());
}

WebApiController

[AcceptVerbs("Post")]
[ActionName("GetColumnNames")]
public DataSet GetColumnNames(String id) {
  DataSet ds = new DataSet();
  if (Convert.ToInt32(id) > 0) {
    //AccountingMethods objAcc = new AccountingMethods();
    //return ds = objAcc.GetColumnsNames("GetColumns", id);
  }
  return new DataSet();
}

当调用webapi控制器动作名称时,我没有被击中

1 个答案:

答案 0 :(得分:0)

我们需要一些额外的信息:

我假设你有以下WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

        // Convention-based routing.
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

我也会尝试

[Route("api/Customers/GetColumnNames")]
[HttpPost]

如果所有其他方法都失败,请尝试将呼叫更改为

var sub = this.http.post('api/Customers/GetColumnNames', body, options)
.map((res: Response) => res.json());

尾部斜杠不应该影响通话,但过去曾经提到它是一个问题所以尝试它可能很有价值。

从浏览器中添加错误会有很大帮助(在chrome中它是F12,工具和网络可以看到通话。