ASP.NET 5 beta7 CORS 不工作

Posted

技术标签:

【中文标题】ASP.NET 5 beta7 CORS 不工作【英文标题】:ASP.NET 5 beta7 CORS not working 【发布时间】:2016-01-06 08:43:04 【问题描述】:

在 OS X 上使用 VS Code。我正在尝试让 CORS 与 1.0.0-beta7 一起使用。我不确定为什么它不起作用。 “不起作用”是指我在我的 javascript 控制台中收到一条消息,上面写着:“XMLHttpRequest 无法加载 ommitedurl。请求的资源上不存在 'Access-Control-Allow-Origin' 标头。来源 '@987654321 @' 因此不允许访问。”我尝试使用 AllowAllOrigins 方法并使用 WithOrigins 方法指定一个或多个 url,但均无济于事。如果这很重要,我将作为 Web 应用程序发布到 Azure。我在下面列出了我的大部分代码。有人可以帮帮我吗?

这是我的 dnvm 列表:

dnvm list

Active Version              Runtime Arch Location             Alias
------ -------              ------- ---- --------             -----
       1.0.0-beta7          coreclr x64  ~/.dnx/runtimes      
       1.0.0-beta5          mono         ~/.dnx/runtimes      
  *    1.0.0-beta7          mono         ~/.dnx/runtimes      default
       1.0.0-beta8          mono         ~/.dnx/runtimes      
       1.0.0-rc1-15798      mono         ~/.dnx/runtimes      
       dnx-mono             mono         ~/.dnx/runtimes      
       dnx-mono.1.0.0-beta8 mono         ~/.dnx/runtimes      

这是我的 project.json 依赖项:

"dependencies": 
    "Microsoft.AspNet.Cors": "1.0.0-beta7",
    "Microsoft.AspNet.Mvc": "6.0.0-beta7",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta7",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta7",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta7",
    "Microsoft.AspNet.WebApi.Client": "5.2.3",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta7",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta7",
    "System.Net.Http": "4.0.1-beta-23225",
    "Newtonsoft.Json": "7.0.1"

这是我的 Startup.cs

public class Startup

    public void ConfigureServices(IServiceCollection services)
    
        services.AddMvc();
        services.ConfigureCors(options =>
        
            options.AddPolicy("AllowPlnkr",
                builder =>
                
                    builder.WithOrigins("http://run.plnkr.co");
                );
        );
        services.Configure<MvcOptions>(options =>
        
            options.Filters.Add(new CorsAuthorizationFilterFactory("AllowPlnkr"));
        );
        services.AddScoped<ITrackerRepository, TrackerRepository>();
    

    public void Configure(IApplicationBuilder app)
    
        app.UseMvc();
        app.UseCors("AllowPlnkr");
        app.UseDefaultFiles();
        app.UseStaticFiles();
    

我的控制器上也有 EnableCors 属性

[EnableCors("AllowPlnkr")]
[Route("api/[controller]")]
public class TrackerController : Controller

【问题讨论】:

尝试移动 app.UseCors("AllowPlnkr");之前 app.UseMvc(); 描述“不工作” @mason 我已经编辑了我的问题。谢谢 @Richard.Davenport 你能不能把你的问题更新为“正确”,而不是把问题回滚到未解决,而是写成答案? 谢谢@vcsjones,我做到了。 【参考方案1】:

代码非常接近工作。我只需要稍微改变我的 Startup.cs。我的根本问题是我的客户端代码错误。我尝试使用 jQuery.ajax() 并且它有效。感谢所有评论和帮助我的人。

这是我的 Startup.cs:

public class Startup

    public void ConfigureServices(IServiceCollection services)
    
        services.AddMvc();
        services.ConfigureCors(options =>
        
            options.AddPolicy("AllowPlnkr",
                builder =>
                
                    builder.WithOrigins("http://run.plnkr.co");
                );
        );
        services.AddScoped<ITrackerRepository, TrackerRepository>();
    

    public void Configure(IApplicationBuilder app)
    
        app.UseMvc();
        app.UseDefaultFiles();
        app.UseStaticFiles();
    

【讨论】:

以上是关于ASP.NET 5 beta7 CORS 不工作的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作

CORS 不工作 ASP.Net MVC5

ASP.NET Mvc5+EF7

Asp.Net Core WebAPI CORS 不工作

SignalR、ASP.NET 5 和 CORS

CORS:使用 ASP.NET 4.5.1 MVC 的 Rest API