Angular 6 与 Asp.net Core 2.1 不存在“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】Angular 6 与 Asp.net Core 2.1 不存在“Access-Control-Allow-Origin”标头【英文标题】:No 'Access-Control-Allow-Origin' header is present Angular 6 with Asp.net Core 2.1 【发布时间】:2019-01-12 10:15:46 【问题描述】:不断收到 No 'Access-Control-Allow-Origin' header is present 使用 asp.net core 2.1 的角度 6 中的错误。
我知道这是 cors 错误。我已经在服务器端添加了策略,但仍然是同样的问题。
startup.cs
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials().WithOrigins("http://localhost:4200");
));
app.UseCors("CorsPolicy");
app.UseMvc();
控制器代码
[HttpPost, AllowAnonymous]
public GenericResponseObject<JwtTokenViewModel> UserAuthentication([FromBody] UserViewModel user)
GenericResponseObject<JwtTokenViewModel> genericResponseObject = new GenericResponseObject<JwtTokenViewModel>();
genericResponseObject.IsSuccess = false;
genericResponseObject.Message = ConstaintStingValue.TagConnectionFailed;
if (ModelState.IsValid)
try
UserViewModel userViewModel = _adminUOW.AdminAuthentication(user);
if (userViewModel != null)
string token = new CommonController(tokenOptions).GetToken(userViewModel, DateTime.UtcNow.AddDays(2));
genericResponseObject.Data = new JwtTokenViewModel
UserName = userViewModel.UserName,
UserId = userViewModel.UserId,
authenticated = true,
entityId = 1,
tokenExpires = DateTime.UtcNow.AddHours(2),
token = token,
SelectedRole = userViewModel.SelectedRole
;
else
genericResponseObject.SuccessMessage = ConstaintStingValue.Tag_No_Profile_key;
genericResponseObject.IsSuccess = true;
genericResponseObject.Message = ConstaintStingValue.TagConnectionSuccess;
catch (Exception exception)
genericResponseObject.IsSuccess = true;
genericResponseObject.SuccessMessage = exception.Message;
genericResponseObject.ErrorCode = exception.HResult;
genericResponseObject.ExceptionErrorMessage = exception.StackTrace;
WriteExceptionToFile.WriteExceptionToFileInLogger(_hostingEnvironment, exception);
return genericResponseObject;
打字稿代码
login(modelValue: UserViewModel, isValid: boolean)
if (isValid) this.genericHttpClientService.GenericHttpPostAndResponse<GenericResponseObject<JwtTokenViewModel>, UserViewModel>(this._userViewModel, this.commonConstantValue.adminLoginUrl).subscribe(item =>
if (item.data!= null && item.data.authenticated)
this.router.navigate(['admin-portal']);
else
this.genericViewModel.successMessage = item.successMessage;
this.progressBarDisplay = false;
,
err =>
console.log(err);
this.progressBarDisplay = false;
);
HttpCLient
public GenericHttpPostAndResponse<T,TE>(postViewModel: TE, destinationUrl: string): Observable<T>
const headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');
return this.httpClientModule.post<T>(environment.baseUrl + destinationUrl, postViewModel, headers );
Getting Error " No 'Access-Control-Allow-Origin' header is present on the requested resource." in ionic2
How to enable CORS in ASP.net Core WebAPI
https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1
【问题讨论】:
你能分享你的api代码吗? 添加控制器代码..... 你为 5001 端口设置 HTTPS 了吗? 对于令牌请求,不需要来自正文。此外,您应该提供内容类型:application/x-www-form-urlencoded 注意AllowAnyOrigin()
会清空origins列表,然后将*
添加到origins,后面的WithOrigins
会添加"http://localhost:4200"
到origins列表。所以,WithOrigins
在AllowAnyOrigin
之后是不必要的,可能是你的问题的原因。
【参考方案1】:
很难说真正的问题是什么。我对 CORS 的经验是,它在实践中比人们想象的要难。我有一个类似的问题,这是由于我的网站需要 Windows 身份验证。结果是预检 CORS 请求需要匿名身份验证。我看到您的控制器具有 AllowAnonymous 属性,但是,如果它托管在 IIS 中,那么该站点也需要具有匿名身份验证。
【讨论】:
以上是关于Angular 6 与 Asp.net Core 2.1 不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章
带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示
在从 Angular 6 调用 ASP.NET Core Web API 的服务器异常上获取 CORS 错误 *only*
带有 Razor 页面的 ASP .Net Core 与 UI 的 Angular [关闭]
.NET 6 Preview 6 现已推出,其中包括对 ASP.NET Core 的许多重大改进。