Asp.net Odata Web API 跨源放置和补丁请求浏览器预检错误
Asp.net Odata Web API Cross Origin Put and Pacth Request Browser Preflight Error
稍后我将尝试描述我的问题。
当我尝试使用 Postman 执行 api 操作时,Fiddler 一切正常。但是当谈到浏览器 Ajax 请求 'OPTIONS' 时,我的 API 似乎没有处理 'OPTIONS' 方法。
顺便说一下,我的 'Get' 和 'Post' 操作在浏览器上就像一个魅力。
我的尝试:
- 启用 Cors(确定)已尝试 web.config 或 global.asax
- 我尝试 Application_BeginRequest 处理 OPTIONS 请求。它 returns 可以,但没有传递到我的主要 Path/Put 函数。
注意:我的应用目前处于开发环境中。所以我的服务和客户端位于具有不同端口的本地主机上。我怀疑它与部署问题有关。
技术
Asp.Net Web Api,Odata 用于服务层,React 用于客户端表示层。
我将不胜感激。
谢谢。
我刚刚解决了这个问题。
解决方案:Set Auth and app.UseCors(corsOptions); config在 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());
}
稍后我将尝试描述我的问题。
当我尝试使用 Postman 执行 api 操作时,Fiddler 一切正常。但是当谈到浏览器 Ajax 请求 'OPTIONS' 时,我的 API 似乎没有处理 'OPTIONS' 方法。
顺便说一下,我的 'Get' 和 'Post' 操作在浏览器上就像一个魅力。
我的尝试:
- 启用 Cors(确定)已尝试 web.config 或 global.asax
- 我尝试 Application_BeginRequest 处理 OPTIONS 请求。它 returns 可以,但没有传递到我的主要 Path/Put 函数。
注意:我的应用目前处于开发环境中。所以我的服务和客户端位于具有不同端口的本地主机上。我怀疑它与部署问题有关。
技术 Asp.Net Web Api,Odata 用于服务层,React 用于客户端表示层。
我将不胜感激。
谢谢。
我刚刚解决了这个问题。
解决方案:Set Auth and app.UseCors(corsOptions); config在 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());
}