Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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.net web api 从Angular 6调用ASP.NET核心Web API时发生服务器异常,获取CORS错误*仅*_Asp.net Web Api - Fatal编程技术网

Asp.net web api 从Angular 6调用ASP.NET核心Web API时发生服务器异常,获取CORS错误*仅*

Asp.net web api 从Angular 6调用ASP.NET核心Web API时发生服务器异常,获取CORS错误*仅*,asp.net-web-api,Asp.net Web Api,我的CORS已经就位并正在工作。这意味着我在get或POST上没有CORS错误。我的请求都在服务器上接收,它们的响应都在客户端上接收 using Microsoft.Owin.Cors; namespace Test { public partial class Startup { public void ConfigureAuth(IAppBuilder app) { app.UseCors(CorsOptions.A

我的CORS已经就位并正在工作。这意味着我在get或POST上没有CORS错误。我的请求都在服务器上接收,它们的响应都在客户端上接收

using Microsoft.Owin.Cors;

namespace Test
{
    public partial class Startup
    {

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
也就是说,除非Web API中发生异常。然后,我得到的不是异常细节,而是CORS错误。因此,客户端无法查看异常详细信息

加载失败 :没有 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为500

下面是我的Startup类中的Configure方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors(builder => builder
        .AllowAnyHeader()
        .AllowAnyOrigin()
        .AllowAnyMethod());

    app.UseMvc();
}
如果CORS请求被接受,并且CORS响应被接受回来,那么为什么在发生错误的情况下,客户机不能接受异常详细信息呢

更新。。。根据马库斯的建议,我实现了一个更详细的版本;但是没有用。在Web API中发生未经处理的异常时,仅在尝试在500响应中返回错误数据的一个案例中,仍然会出现完全相同的CORS错误

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));

    services.AddMvc();
    services.AddOptions();
    services.Configure<AppConfig>(Configuration.GetSection("AppConfig"));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors("AllowAllPolicy");

    app.UseMvc();
}
这些都没有帮助。CORS一直工作到Web API中出现异常为止。然后,我得到这个,而不是来自500的异常信息:

加载失败 :没有 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为500


据我所见,您对CORS配置没有任何特定的限制,您允许“全部”。在这种情况下,这可以帮助你

我还看到,您使用[EnableCors…]属性装饰控制器,因此在出现错误时,它可能会脱离当前控制器,并且错误会在“其他地方”处理,这可能会导致属性超出范围

我使用了一种更简单的方法,但允许CORS,并且错误也会“传输”到客户端

using Microsoft.Owin.Cors;

namespace Test
{
    public partial class Startup
    {

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);

然后删除与CORS相关的所有其他内容,这对于启用全局的CORS来说已经足够了,并且允许所有来源(即。*)。

只是好奇,为什么两个URL中都有不同的端口?端口64630是Web API,在端口4200上从客户端调用。这就是为什么这是一个CORS电话。问题是我有CORS支持来处理所有请求和响应。只有当Web API端出现异常时,我才会收到CORS错误。然后,我希望在客户端返回异常详细信息,而不是这个CORS错误?是否有一些全局处理程序,例如过滤器?这是设计的。有关更多信息,请参见此处:您需要显式调用
app.UseExceptionHandler(…)
。更多信息。