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 Auth 和 app.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 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