Asp.net Odata Web API 跨域放置和路径请求浏览器预检错误

Posted

技术标签:

【中文标题】Asp.net Odata Web API 跨域放置和路径请求浏览器预检错误【英文标题】:Asp.net Odata Web API Cross Origin Put and Pacth Request Browser Preflight Error 【发布时间】:2019-03-27 12:08:13 【问题描述】:

稍后我将尝试描述我的问题。

当我使用 Postman 尝试我的 api 操作时,Fiddler 一切正常。但是当谈到浏览器 Ajax 请求时,我的 API 似乎没有处理 'OPTIONS' 方法。

顺便说一句,我的“获取”和“发布”操作就像浏览器上的魅力一样。

我的尝试:

    启用 Cors (OK) 尝试了 web.config 或 global.asax 我尝试了 Application_BeginRequest 来处理 OPTIONS 请求。它返回 OK,但没有传递给我的主 Path/Put 函数。

注意:我的应用程序目前处于开发环境中。因此,我的服务和客户端位于具有不同端口的 localhost 上。我怀疑它与部署问题有关。

技术 Asp.Net Web Api,服务层的 Odata 和客户端表示层的反应。

我将不胜感激。

谢谢。

【问题讨论】:

【参考方案1】:

我刚刚解决了这个问题。

解决方案:Set Authapp.UseCors(corsOptions);app.useWebApi() 之前配置代码行。 完整配置位于下方。好难过……

Startup.cs

public void Configuration(IAppBuilder app)
                      
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
        HttpConfiguration configuration = new HttpConfiguration();
        //Config
        Configure(app);
        WebApiConfig.Register(configuration);
        app.UseWebApi(configuration);
    


private void Configure(IAppBuilder app)
    
        var corsPolicy = new CorsPolicy
        
            AllowAnyMethod = true,
            AllowAnyHeader = true,
            SupportsCredentials = true
        ;

        // Try and load allowed origins from web.config
        // If none are specified we'll allow all origins
        // TODO get this value from web.config
        var origins = "http://localhost:5911";

        if (origins != null)
        
            foreach (var origin in origins.Split(';'))
            
                corsPolicy.Origins.Add(origin);
            
        
        else
        
            corsPolicy.AllowAnyOrigin = true;
        

        var corsOptions = new CorsOptions
        
            PolicyProvider = new CorsPolicyProvider
            
                PolicyResolver = context => Task.FromResult(corsPolicy)
            
        ;
        app.UseCors(corsOptions);
        OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions()
        
            TokenEndpointPath = new Microsoft.Owin.PathString("/getToken"),
            AccessTokenExpireTimeSpan = TimeSpan.FromHours(1),
            AllowInsecureHttp = true,
            Provider = new AuthorizationServerProvider() // Custom Provider            
        ;

        app.UseOAuthAuthorizationServer(options);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    

【讨论】:

以上是关于Asp.net Odata Web API 跨域放置和路径请求浏览器预检错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 OData 的 ASP.Net Core Web API 实现对于单个实体 URI 失败

ASP.NET Odata Web API 的错误处理

Asp.Net Web API 2第十八课——Working with Entity Relations in OData

在 ASP.NET Web API 控制器的 nunit 测试中实例化新的 System.Web.Http.OData.Query.ODataQueryOptions

Asp.Net MVC4 Web API - 我们是不是需要 OData 来构建快速查询服务

无法使用 ASP.NET (MVC 4) Web API OData Prerelease 加载文件或程序集 System.Net.Http,版本 = 4.0.0.0