【发布时间】:2018-07-24 21:58:35
【问题描述】:
我有一个Angular 服务已连接到我的.NET Web API,我正在尝试将POST 一些数据发送到API。目前我使用的是HTTP 而不是HttpClient,而且我没有发送任何数据。但服务已成功连接到 API。
在将实际数据从我的 Angular 控制器传递到服务(进而传递到 API)以及在服务中实现 HttpClient 方面需要帮助。到目前为止,我的控制器只是调用了我的服务的 myFunction() 函数,并且没有传递任何参数,因此没有数据。我不确定在服务的 RXJS 部分的哪个位置附加我的数据。
注意:但是我实现了这个,由于我的 API 的配置,我仍然需要它通过withCredentials: true
Web API 控制器:
namespace api.controllers
{
[Authorize]
public class ValuesController : ApiController
{
static List<string> strings = new List<string>()
{
"value0", "value1", "value2"
};
// GET api/values
public IEnumerable<string> Get()
{
return strings;
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
strings.Add(value);
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
}
Web API web.config 文件(CORS 设置):
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:5200" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
myComponent.component.ts:
myService: MyService;
constructor(myService: MyService) {
this.myService = myService;
this.myService.myFunction();
}
myService.service.ts:
import { Injectable } from '@angular/core';
import { Http, Response, Request, Headers } from '@angular/http';
// import { HttpClient, HttpResponse, HttpRequest, HttpHeaders, HttpInterceptor, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { from } from 'rxjs';
import { map, filter, catchError, mergeMap } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class MyService {
http: Http;
constructor(http: Http) {
this.http = http;
};
public myFunction() {
let request = new Request({
method: "POST",
url: "http://localhost:9090/api/values",
withCredentials: true
});
return this.http.request(request)
.pipe(map(res => res.json()))
.subscribe(
data => console.warn(data),
err => console.error(err),
() => console.log("empty")
);
}
}
如何从我的控制器将一些实际数据附加到此服务?我该如何调整服务以使用 HttpClient 呢?我尝试将所有http: Http 引用更改为HttpClient,完成所有HttpClient 导入并注释掉.map/json portions,但我仍然在return this.http.request(request) 行中的request 参数下看到一条红线我这样做时的服务。
【问题讨论】:
标签: angular http asp.net-web-api rxjs httpclient