首先,将策略添加到ConfigureServices方法中,从而在Startup.cs中设置了Cors策略:
services.AddCors(
cfg =>
{
cfg.AddPolicy("MyPolicy",
bldr => {
bldr.AllowAnyHeader()
.AllowAnyMethod()
.WithOrigins("http://localhost:8001"); });
cfg.AddPolicy("AnyGET",
bldr => { bldr.AllowAnyHeader().WithMethods("GET").AllowAnyOrigin();});
});
接下来,我将使用我的Configure方法中声明的策略:
app.UseCors("MyPolicy");
app.UseAuthentication();
app.UseMvc(config => { config.MapRoute("MyAPIRoute",
"api/{controller}/{action}"); });
在“我的控制器”中,我已启用Cors来指定我的策略,并且我已经配置了特定的Controller方法来接受承载令牌,作为对http帖子进行身份验证的方式:
namespace My.Api.Controllers
{
[EnableCors("MyPolicy")]
public class AccountController : Controller
{
....
[HttpPost]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task<IActionResult> ChangePassword([FromBody] PasswordChangeViewModel model)
{
我正在从我的有角度的应用程序对此方法发出http发布请求:
public changePassword(password: Password) {
return this.http.post("http://localhost:8000/api/account/changepassword", password,
{
headers: new Headers({"Authorization": "Bearer " + localStorage.getItem('token').toString()})
}).pipe(map((res: Response) => res.json()));
}
我尝试了有关堆栈溢出的所有建议,但似乎没有任何效果,并继续出现此错误:
我为另一个项目设置了相同的设置,这从来都不是问题。唯一的不同是,我将此角度应用程序从5更新为角度6。此外,每当我从邮递员发出此呼叫时,它都会成功。我碰壁了,需要帮助!预先感谢!
更新 我已将角度通话更改为:
public changePassword(password: Password) {
let headers = new Headers({ 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem('token').toString() });
let options = new RequestOptions({ headers: headers });
return this.http.post("http://localhost:8000/api/account/changepassword", password, options);
}
我仍然遇到相同的错误。
更新 我还尝试通过使用@ angular / common / http中的HttpClient来更改我的角度服务制作http帖子的方式:
public changePassword(password: Password) {
let headers = new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem('token').toString() });
return this.httpClient.post("http://localhost:8000/api/account/changepassword", password, { headers: headers} );
}
更新 我正在与此圈子。好像我已经尝试了一切。请帮忙!
答案 0 :(得分:1)
我终于在昨天发现了这个问题……很as愧,但是问题是我的密码模型属性之一与我的API中的ModelView密码不匹配。一旦他们匹配,就可以了...