我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码):
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseCors("AllowAll");
app.UseMvc();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//Add Cors support to the service
services.AddCors(
options => options.AddPolicy(
"AllowAll", p => p.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
)
);
}
从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么?
thnx
编辑:
这是邮递员的请求:
卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'Pragma:no cache'-H'访问控制请求方法:POST'-H'来源:http://localhost:9000'-H'接受编码:gzip,deflate,sdch,br'-H'接受语言:en-US,en;q=0.8'-H'用户代理:Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/51.0.2704.103 Safari/537.36'-H'接受:/'-H'缓存控制:无缓存'-H'引用:http://localhost:9000/“-H”连接:保持活动状态“-H”访问控制请求头:接受、授权、内容类型“-compressed”
你可以在《邮递员》中导入并查看它。此请求由angular应用程序发送。
希望这能有所帮助。
最后,我决定在中间件中添加以下方法:
private void AddCors(HttpContext context)
{
context.Response.Headers.Add("Access-Control-Allow-Headers",
new string[] { "Authorization", "Content-Type" });
context.Response.Headers.Add("Access-Control-Allow-Methods",
new string[] { "OPTIONS", "POST", "GET", "DELETE", "PUT" });
IEnumerable<string> allowedUrls = new List<string>()
{
"http://localhost:8100",
"http://localhost:9000"
};
if (allowedUrls.Count() > 0)
{
foreach(string x in allowedUrls)
{
var origin = context.Request.Headers.FirstOrDefault(
key => key.Key == "Origin");
var found = x.ToLower() == origin.Value.ToString().ToLower();
if (found)
{
context.Response.Headers.Add("Access-Control-Allow-Origin",
new string[] { origin.Value });
}
}
}
return;
}
编辑:
这很好,但在逻辑上它并没有按照我需要的那样工作,所以我在我的中间件类中使用了这个,这很好:
// Add CORS to every response
context.Response.Headers.Add("Access-Control-Allow-Headers",
new string[] { "Authorization", "Content-Type" });
context.Response.Headers.Add("Access-Control-Allow-Methods",
new string[] { "OPTIONS", "POST", "GET", "DELETE", "PUT" });
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
if (context.Request.Method.Equals("OPTIONS", StringComparison.Ordinal))
{
context.Response.StatusCode = 204;
return _next(context);
}
谢谢
您应该阅读以下文章,以便更好地了解如何在ASP. NET 5中使用Cors。
https://docs.asp.net/en/latest/security/cors.html
基本上,UseCors注册一个Cors中间件来处理与Cors相关的请求。但是你实际上不需要在你的情况下注册它,因为MVC有内置的组件(过滤器),以类似的方式处理它。Cors中间件在您不想使用MVC的情况下非常有用。
因此,对于您的场景,删除UseCors
注册,如果您查看上面的链接,您可以看到要启用全局Cors策略,您可以执行以下操作:
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
});
在我的应用程序(有angular2作为前端)中,我按照以下方式进行-
app.UseCors(builder => {
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
有关更多信息,请参阅本手册-https://docs.asp.net/en/latest/security/cors.html
看看这是否有帮助。
当从查询字符串提取的模型将字典作为其属性之一时,Swagger生成错误的URL。如何告诉Swagger更改URL中字典的格式或手动定义输入参数模式,而不自动生成?试图使用Swashbuck和NSwag。 控制器 输入模型-查询字符串 Swagger UI为查询模型的“条件”属性显示了这种格式 Swagger生成的URL-Open API v2-将不会绑定到“条件” Swagger生成的URL-Op
我一直在搜索这个主题,但没有找到我想要的。基本上,我开始用UML的所有东西,用例,类图来计划一个项目。然后我们决定使用ASP。NET MVC。该应用程序是一种O-Desk或Elance 我有用户,承包商,公司,主持人和管理员。 我有点困惑模型应该如何表示这个用户,以及如何使用asp设置权限和角色。net mvc特性。 在一个正常的应用程序中,我会为他们每个人都创建一个类,他们可能会扩展User,其
我的问题和这个差不多。 ASP。Net Core与EF Core和CosmosDB-身份问题 提供的答案不起作用。这会产生其他问题。当我从升级我的应用程序时,这些错误开始出现。NET Core 3.1 to。净5。降级应用程序使所有错误都消失了。显然,这个问题与efcore 5中引入的对cosmos的乐观并发支持有关。 https://docs.microsoft.com/en-us/ef/cor
我正在实现确认电子邮件功能。我正在向用户发送一封帐户激活电子邮件,电子邮件中有激活链接。我正在尝试,当用户单击电子邮件中的链接时,它会将用户重定向到我的方法ConfirmEmail之一,该方法采用两个参数user,即加密的电子邮件和代码。当我单击调试器设置为该ConfirmEmail方法的链接时,它不会出现在那里。 确认电子邮件方式: 电子邮件中的链接如下所示: https://localhost
我正在尝试从页面: 控制器: 但是我似乎无法在前端检索会话
我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是