WEB API:我显然无法启用 CORS(?)

Posted

技术标签:

【中文标题】WEB API:我显然无法启用 CORS(?)【英文标题】:WEB API : I apparently can't enable CORS ( ? ) 【发布时间】:2017-07-09 23:12:57 【问题描述】:

Ahoy Coder 朋友。

在这个问题Angular 2 + web api 之后,我想到我可能必须为我的前端启用 CORS 才能访问我的后端 Web api。

但是,即使我尝试了这些步骤 http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/08/31/how-to-enable-cors-in-the-asp-net-web-api.aspx 以及这些 https://enable-cors.org/server_aspnet.html ,显然没有任何改变:当我尝试使用邮递员到达 http://localhost:58825/api/character 时,我收到了预期的字符列表,但没有 CORS答案中的标题(允许来源等)。 至于前端,您可能会在链接的问题中看到 Angular 甚至找不到 API。

这里是 web.config 的相关示例:

public static void Register(HttpConfiguration config)
    
        // Web API configuration and services
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*");
        config.EnableCors(cors);

还有控制器:

public class CharacterController : ApiController

    private readonly CharacterRepository repo = new CharacterRepository();
    javascriptSerializer jsonConverter = new JavaScriptSerializer();

    [EnableCors(origins:"http://localhost:3000", headers:"*", methods:"*")]
    // GET: api/Character
    public IEnumerable<string> GetAll()
    
        List<Character> myCharacs = repo.Get().ToList();
        List<String> myJsonCharacs = new List<string>();
        foreach (var charac in myCharacs)
        
            var cur = jsonConverter.Serialize(charac);
            myJsonCharacs.Add(cur);
        

        return myJsonCharacs;
        //return myCharacs;
    

显然,我添加了 nuget 包 Microsoft.AspNet.WebApi.Cors (5.2.2)。

我尝试清理解决方案、重建、重新启动 VS...我已经查看了此处在 SO 上提出的“类似问题”,但我什至没有“无标题”异常,我的请求似乎通过了没有给出关于 CORS 的 f*ck。

我的前端应用程序位于 localhost:3000,我的 api 位于 localhost:58225(我通过 Visual Studio 启动它,如果这有任何改变)

有人知道我在什么方面失败了吗? (生活除外,这不是问题,我已经习惯了)

编辑:Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3 的可能加倍

重新编辑:我不知道它是否是真正的 doublon,但我设法通过添加解决了我的问题

add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."  
verb="GET,HEAD,POST,PUT,DELETE"     
type="System.Web.Handlers.TransferRequestHandler"     
preCondition="integratedMode,runtimeVersionv4.0" /

到我的 webconfig 文件,如原始帖子中所述,我现在在邮递员中看到了标题。

【问题讨论】:

【参考方案1】:

当您需要启用 CORS 时,您可以转到 Startup.cs 文件并添加:

using Microsoft.Owin.Cors;

在开头。那么你有两个选择:

    您指定来源:

    var corsPolicy = new CorsPolicy  AllowAnyHeader = true, AllowAnyMethod = true ;
            corsPolicy.Origins.Add("your origin");
            var corsOptions = new CorsOptions
                        
                            PolicyProvider = new CorsPolicyProvider
                            
                                PolicyResolver = context => Task.FromResult(corsPolicy)
                            
                        ;
    

    您允许所有这些:

    app.UseCors(CorsOptions.AllowAll);
    

这些都发生在Configuration 方法中。

【讨论】:

这是一个web api项目,没有startup.cs文件。 然后将其添加到在 API 运行之前执行代码的文件之一,应该可以工作。这样的文件是Global.asax。此外,如果您使用Microsoft Identity 进行身份验证,则WebApi 项目中有一个Startup.cs 文件。 好吧,我不使用微软身份验证,问题表明我在WebApiConfig中做了类似的步骤。我不明白为什么在 webconfig 中添加标头可以解决问题并将它们添加到其他任何地方还不够:/

以上是关于WEB API:我显然无法启用 CORS(?)的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 上为 .NET Web Api 启用 CORS

为 Web API 1、.net 4.0 启用 CORS 中的问题

即使启用了CORS,Web Api仍会始终发生403错误

在 .NET Core Web API 上为 CORS 启用 OPTIONS 标头

为 Web API 启用多个 CORS

在 Web API 中启用了 CORS,但访问被拒绝