Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.Net5启用码不工作_Asp.net_Cors_Asp.net Core Mvc - Fatal编程技术网

Asp.Net5启用码不工作

Asp.Net5启用码不工作,asp.net,cors,asp.net-core-mvc,Asp.net,Cors,Asp.net Core Mvc,我的Asp.Net5 Web Api无法在Chrome上运行,这是由于CORS问题,并且我的CORS配置似乎与我的OAuthBeareAuthentication冲突。 在my Startup.cs中: services.AddCors(); services.ConfigureCors(o => o.AddPolicy("AllowAll", p => p.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMet

我的Asp.Net5 Web Api无法在Chrome上运行,这是由于CORS问题,并且我的CORS配置似乎与我的OAuthBeareAuthentication冲突。 在my Startup.cs中:

    services.AddCors();
    services.ConfigureCors(o => o.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
    .AllowAnyHeader()
    .AllowAnyMethod()
    .AllowCredentials()));
我的控制器看起来像:

    [Authorize(OAuthBearerAuthenticationDefaults.AuthenticationScheme)]
    [EnableCors("AllowAll")]
    public class MyController
然后,我发现请求的资源上没有“访问控制允许来源”标题。

但是,如果删除authorize属性:

    [EnableCors("AllowAll")]
    public class MyController

然后我被允许。。。发生了什么事?

首先,清除chrome上的缓存,然后尝试使用edge。Chrome正在吞噬你的错误

看到请求,你应该有2个。 飞行前和请求本身

如果飞行前(选项)失败,甚至不会发出请求

通常预飞失败,因为服务器错误为500。例外情况不包括cors标题,因此这可能是您的问题

好吧,现在问题是chrome不会在任何地方显示错误。 因此,您可以在EDGE上检查请求,这将给您一个实际错误(您必须使用开发者控制台,错误不会显示在浏览器上)或使用fiddler

现在,您可以看到您的错误,您可能知道如何继续,但要补充一点我自己面临的问题:

  • 如果您有
    services.AddMvc()
    ,这已经将cors添加到管道中,因此使用
    services.AddCors()
    再次添加它会抛出一个键已发现异常。(我认为这是一个bug,可能会在github上提交一个问题)

  • 要在使用AddMvc时配置cors,请执行以下操作:

    services.ConfigureCors(options =>
                        options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
                                                            .AllowAnyMethod()
                                                            .AllowCredentials()
                                                            .AllowAnyHeader()));
    
  • 要将cors添加到管道中,您需要执行
    app.UseCors(“AllowAll”)关于配置方法

  • 如果您使用的是
    app.MapWhen
    请注意MapWhen分叉,因此您可能需要为与MapWhen一起使用的所有需要COR的分支指定UseCOR,如api端点。(如果你不知道我在说什么,就忽略它。)


  • 您只需将以下内容添加到web.config文件的
    system.webServer
    部分:

     <httpProtocol>
       <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT" />
        <add name="Access-Control-Allow-Headers" value="accept, content-length, content-type" />
       </customHeaders>
     </httpProtocol>
    
    
    

    根据需要修改方法和标题。在这些标题中不能使用*。它还允许您使用AJAX请求图像和HTML等内容,而不仅仅是控制器操作服务的资源。

    您是如何解决这个问题的?不幸的是,我没有