我有一个简单的Angular应用程序在4200本地运行,我正在测试一个网络应用程序接口在5000本地运行,使用. net核心。我的startup.csCORS配置正确,允许我相信的一切。
在配置服务部分,我有:服务。addCors();
在配置部分,我有:
app。UseCors(选项)=
然而,当我尝试点击我的webapi时,我仍然可以在浏览器中看到它。
从源头http://localhost:4200已被CORS策略阻止:对起飞前请求的响应不通过权限改造检查:起飞前请求不允许重定向。
我看过其他答案,它们似乎都有这种或类似的变化,我没有改变。不知道我还需要做什么?
在服务中注册COR
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.SetIsOriginAllowed((host) => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
添加cors中间件
app.UseCors("CorsPolicy");
在方法ConfigureServices中添加以下代码段。编辑此项仅允许自定义标题。
// Add service and create Policy with options
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
});
在Configure方法中添加以下内容
app.UseCors("CorsPolicy");
将“EnableCors”属性添加到控制器。
[EnableCors("CorsPolicy")]
启动中。反恐精英。Configure()。使用cors()
preforeapp。是否使用MVC()
(/)
Firefox要求为您的API安装证书,以便使用HTTPS协议发送Http请求。
使用Postman和浏览器开发工具测试API。注意2个Http请求。Http 200是一个“飞行前”程序,用于查看哪些CORS选项可用。
HTTP 500(内部服务器错误)
,它将返回一个开发人员异常页面,邮递员将显示一条“请求的资源上不存在“访问控制允许源代码”标题”
消息-这是错误引导
ASP. NET Core 2.2不允许允许凭据与AllowAnyOrigin()
在ASP中启用跨源请求(COR)。网芯
(/)
。>
创建Visual Studio解决方案
md c:\s\a cd c:\s\a c:\s\a>dotnet new sln -n solutionName
创建ASP. NET Core项目
c:\s\a>md s c:\s\a>cd s c:\s\a\s>dotnet new webapi -o api -n api
API启动设置和CORS配置
启动设置。json
克隆开发概要到分期概要
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iis": {
"applicationUrl": "http://localhost:myIISApiPortNumber",
"sslPort": myIISApiSSLPortNumber
},
"iisExpress": {
"applicationUrl": "http://localhost:myIISExpressApiPortNumber",
"sslPort": myIISExpressApiSSLPortNumber
}
},
"profiles": {
"Development (IIS Express)": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Staging (IIS Express)": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "https://localhost:myIISExpressApiSSLPortNumber;http://localhost:myIISExpressApiPortNumber",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
},
"Production (IIS)": {
"commandName": "IIS",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"applicationUrl": "https:localhost:myIISApiSSLPortNumber;http://localhost:myIISApiPortNumber"
}
}
}
startup.cs
添加CORS配置
public class Startup
{
public IConfiguration Configuration { get; }
public IServiceCollection _services { get; private set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
_services = services;
RegisterCorsPolicies();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseCors("DevelopmentCorsPolicy");
app.UseDeveloperExceptionPage();
}
else if (env.IsStaging())
{
app.UseCors("StagingCorsPolicy");
}
else
{
app.UseCors("ProductionCorsPolicy");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc(); // CORS middleware must precede any defined endpoints
}
private void RegisterCorsPolicies()
{
string[] localHostOrigins = new string[] {
"http://localhost:4200", "http://localhost:3200"};
string[] stagingHostOrigins= new string[] {
"http://localhost:4200"};
string[] productionHostOrigins = new string[] {
"http://yourdomain.net", "http://www.yourdomain.net",
"https://yourdomain.net", "https://www.yourdomain.net"};
_services.AddCors(options => // CORS middleware must precede any defined endpoints
{
options.AddPolicy("DevelopmentCorsPolicy", builder =>
{
builder.WithOrigins(localHostOrigins)
.AllowAnyHeader().AllowAnyMethod();
});
options.AddPolicy("StagingCorsPolicy", builder =>
{
builder.WithOrigins(stagingHostOrigins)
.AllowAnyHeader().AllowAnyMethod();
});
options.AddPolicy("ProductionCorsPolicy", builder =>
{
builder.WithOrigins(productionHostOrigins)
.AllowAnyHeader().AllowAnyMethod();
});
//options.AddPolicy("AllowAllOrigins",
// builder =>
// {
// WARNING: ASP.NET Core 2.2 does not permit allowing credentials with AllowAnyOrigin()
// cref: https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs=visual-studio
// builder.AllowAnyOrigin()
// .AllowAnyHeader().AllowAnyMethod();
// });
//options.AddPolicy("AllowSpecificMethods",
// builder =>
// {
// builder.WithOrigins(productionHostOrigins)
// .WithMethods("GET", "POST", "HEAD");
// });
//options.AddPolicy("AllowSpecificHeaders",
// builder =>
// {
// builder.WithOrigins(productionHostOrigins)
// .WithHeaders("accept", "content-type", "origin", "x-custom-header");
// });
//options.AddPolicy("ExposeResponseHeaders",
// builder =>
// {
// builder.WithOrigins(productionHostOrigins)
// .WithExposedHeaders("x-custom-header");
// });
//options.AddPolicy("AllowCredentials",
// WARNING: ASP.NET Core 2.2 does not permit allowing credentials with AllowAnyOrigin() cref: https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs=visual-studio
// builder =>
// {
// builder.WithOrigins(productionHostOrigins)
// .AllowCredentials();
// });
//options.AddPolicy("SetPreflightExpiration",
// builder =>
// {
// builder.WithOrigins(productionHostOrigins)
// .SetPreflightMaxAge(TimeSpan.FromSeconds(2520));
// });
});
}
}
在值控制器上设置断点。Get()
与邮递员一起测试API:
https://localhost:myApiPortNumber/api/values
创建角度应用程序
c:\s\a\s>ng new Spa1 --routing (will automatically create Spa folder)
启动Spa1应用程序
c:\s\a\s>cd Spa1 c:\s\a\s\Spa1>Ng serve
浏览到http://localhost:4200/
在Spa1中实现CORs
应用程序。单元ts
import { HttpClientModule } from '@angular/common/http';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
HttpClientModule,
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
应用程序。组成部分ts
>
导入HttpClient
使用CORS请求添加getValue()
方法
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
title = 'Spa1';
values: any;
apiUrl: string = environment.apiUrl;
valuesUrl = this.apiUrl + "values";
constructor(private http: HttpClient) { }
ngOnInit() {
this.getValues();
}
getValues() {
this.http.get(this.valuesUrl).subscribe(response => {
this.values = response;
}, error => {
console.log(error);
});
}
}
app.component.html
<div style="text-align:center">
<h1>
Welcome to {{ title }}!
</h1>
</div>
<h2>Values</h2>
<p *ngFor="let value of values">
{{value}}
</p>
<router-outlet></router-outlet>
environment.ts
export const environment = {
production: false,
apiUrl: 'https://localhost:myApiPortNumber/api/'
};
启动Spa1应用程序
c:\s\a\s\Spa1>Ng serve
浏览到http://localhost:4200/
修正Firefox块的一种方法:
FireFox|选项|隐私
证书管理器|[添加异常]:
add localhost
>
克隆Spa1
c:\s\a\s>xcopy /s /i Spa1 Spa2
Spa2的重构标题
应用程序。组成部分ts
export class AppComponent implements OnInit {
title = 'Spa2';
}
在端口3200上启动Spa2应用程序
c:\s\a\s\Spa2>ng serve --port 3200
浏览到http://localhost:3200/
停止使用开发(IIS Express)配置文件调试API
使用暂存(IIS Express)配置文件开始调试API
浏览到http://localhost:4200/
浏览到http://localhost:3200/
使用开发工具检查Http响应:
问题内容: 我正在建立一个站点,在该站点中我想从textarea元素的值创建文件客户端。 我有执行此操作的代码,但出现此错误 HTTP错误404.15-找不到请求过滤模块配置为在查询字符串过长的情况下拒绝请求。 有没有一种方法可以覆盖它,以便我能够处理任何大小的请求? 如果没有,有没有办法在不使用文件系统/活动x对象的情况下生成客户端文件? 谢谢 问题答案: 将以下内容添加到您的web.confi
我正在创建一个应用程序,它在开发中使用webpack-dev-server和react-router。 似乎webpack-dev-server是基于这样一个假设构建的,即在一个地方(即“/”)有一个公共入口点,而react-router允许无限数量的入口点。
问题内容: 我从此链接克隆了一个有关Web浏览器上实时图像处理的项目:然后,我不允许我的浏览器访问我的相机。我收到此JavaScript警报: 嗯,网络摄像头没有启动。你有摄像头吗?您同意了吗?刷新后重试。并且允许按钮不会显示,就像我访问他的网站一样。 问题答案: 您是否正在通过localhost访问通过HTTP提供的网页?如果您通过访问它,Chrome会征求您使用相机的许可。 如果您直接打开网页
本文向大家介绍lamp主机是什么 vps如何配置lamp主机,包括了lamp主机是什么 vps如何配置lamp主机的使用技巧和注意事项,需要的朋友参考一下 很多人都不知道lamp主机是什么,包括小编刚开始也不知道,原来lamp分别是Linux、Apache、Mysql、Perl/PHP/Python的首字母简写,也就是一种web服务器网站环境配置方式。那么,vps如何配置lamp主机呢?
在这两种情况下,当应用程序处于前台时,消息是在扩展FirebaseMessagingService的服务中接收的,在onMessageReceived中,我们可以通过包中的自定义参数过滤请求,但当应用程序处于后台,消息是从控制台发送的时,接收器不会被调用,推送消息会以某种方式添加。 是否可以处理此请求?
我试图从JS/Ajax向我的WebAPI发出请求时遇到了问题。在我的解决方案中,我有一个发布在srv02:2400上的Web API,我的网站发布在srv02:2300上 当我导航到页面时http://srv02:2300/all-请求。aspx,页面加载正常,除了应该来自我的API的数据 我得到了一个错误: 但是,如果我把url超文本传输协议://srv02:2400/api/请求/查找/1粘贴