CORS Asp.Net Core 通过 appsetting.json

Posted

技术标签:

【中文标题】CORS Asp.Net Core 通过 appsetting.json【英文标题】:CORS Asp.Net Core through the appsetting.json 【发布时间】:2019-07-20 22:38:53 【问题描述】:

这个想法是我正在使用的应用程序 - 当我转发到通过配置文件(例如 appsettings.json)将它们放在一个地方时,它们允许他们更改其中的访问信息。具有将字符串连接到数据库的能力。 我在 appsettings 文件中做这个:

 "CORSConfiguration": 
    "WithOrigin": "",
    "WithMethod": "*",
    "WithHeader": "*",
    "WithCredentials": "*"
  ,

在 WithOrigin 中将插入请求的资源、WithMethod 请求的方法等... 然后我创建界面:

public interface ICORSConfiguration
    
        List<string> WithOrigin  get; set; 
        List<string> WithMethod  get; set; 
        List<string> WithHeader  get; set; 
        List<string> WithCredentials  get; set; 
    

然后我创建继承这个接口的类:

public class CORSConfiguration: ICORSConfiguration

   public List<string> WithOrigin  get; set; 
   public List<string> WithMethod  get; set; 
   public List<string> WithHeader  get; set; 
   public List<string> WithCredentials  get; set; 

你对如何做到这一点有什么建议吗?这里有什么可能性......? 我如何在控制器中安装这些控件......我不知道如何完成这个。 对于只有 Mail 方法来发送电子邮件的 REST 应用程序,我需要这个。 方法如下:

[HttpPost("send")]
        public void Send(EmailMessage emailMessage)
        

            var message = new MimeMessage();
            message.From.Add(new MailboxAddress(emailMessage.Email, emailMessage.Name));
            message.To.AddRange(emailMessage.To.Select(c => new MailboxAddress(c.Email)));
            message.Cc.AddRange(emailMessage.Cc.Select(c => new MailboxAddress(c.Email)));
            message.Bcc.AddRange(emailMessage.Bcc.Select(c => new MailboxAddress(c.Email)));

            message.Subject = emailMessage.Subject;

            message.Body = new TextPart(TextFormat.html)
            
                Text = emailMessage.Message
            ;
            CorsService corsService = new CorsService();
            corsService.setAllowedOrigins(new HashSet(Array.("*")));

            //_corsConfiguration.WithHeader
            //_corsConfiguration.WithMethod;

            using (var emailClient = new MailKit.Net.Smtp.SmtpClient())
            
                //emailClient.Connect(_emailConfiguration.SmtpServer, _emailConfiguration.SmtpPort, true);
                emailClient.Connect("smtp.gmail.com", 465);
                //emailClient.Connect("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.SslOnConnect);
                emailClient.AuthenticationMechanisms.Remove("XOAUTH2");
                emailClient.Authenticate(_emailConfiguration.SmtpUsername, _emailConfiguration.SmtpPassword);
                //emailClient.
                emailClient.Send(message);
                emailClient.Disconnect(true);
            

        

有了这个 CorsServices,我尝试了一些东西,但它不起作用......

【问题讨论】:

【参考方案1】:

需要在服务器上启用 Cors。因此,如果您调用 x webservice 那么该服务必须启用 cors 支持。您可以在控制器 lebel 上执行此操作,也可以在启动类中更好地执行此操作。请参阅此处了解更多详情。

您不需要创建类和应用设置值。

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

【讨论】:

我做到了,但我想知道是否有预期的解决方案,通过 appsettings.json 文件...

以上是关于CORS Asp.Net Core 通过 appsetting.json的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS/ASP.Net Core 2.1 版本 CORS 错误

在 asp.net core 中启用 CORS

ASP.NET Core 为特定控制器禁用 CORS

根据官方文档,Asp.net Core 3.0 CORS 无法正常工作

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

Blazor 无法连接到 ASP.NET Core WebApi (CORS)