我有一个与.NET Web API连接的Angular服务,我正在尝试将一些数据
我需要帮助将实际数据从我的Angular控制器传递到服务(从而传递到API),并在服务中实现
注意:无论我如何实现,由于我的API配置,仍需要传递
Web API控制器:
我该如何在控制器中向此服务添加一些实际数据?我应该如何调整服务以使用HttpClient呢?我尝试将所有
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部分
,但是当我这样做时,在我的服务的return this.http.request(request)
行中的request
参数下面仍然会出现红线。
withCredentials: true
键/值对传递给了服务中的myFunction
。由于我的API配置,这是我必须要做的事情。请问如何在您的示例中包含withCredentials: true
? - Kyle Vassella