DevExtreme ODataStore Remove 方法 withCredentials 在 React 项目中不起作用
DevExtreme ODataStore Remove method withCredentials not working in React project
我遇到了从 devextreme odatastore 中删除实体的问题。
我在本地有两个项目,后端项目在 localhost:54602 上工作,前端项目 运行 在 localhost:3000 上工作(react 应用程序)
我可以在没有 CORS 问题的情况下请求数据。 (CORS 设置在后端完成)
但是当我尝试从 ODataStore 中删除实体并在调试模式下查看后端时
context.User.Identity.IsAuthenticated 变量更改为 false。请求失败。
Chrome 控制台输出在这里
对“http://localhost:54602/units(3)' from origin 'http://localhost:3000”处的 XMLHttpRequest 的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。
我阅读了所有关于 that link about CORS Preflight
我的 CORS 设置在这里。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
.
.
.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.
app.UseCors(options =>
{
options.WithOrigins("http://localhost:3000")
.WithMethods("GET", "POST", "PUT", "PATCH", "POST", "DELETE", "OPTIONS")
.AllowAnyHeader()
.AllowCredentials();
}
);
.
}
在 React 应用程序中,我正在创建这样的 oDataStore
export default class extends React.Component {
.
.
oDataStore = new ODataStore(
{
key: 'Oid',
version: 4,
url: 'http://localhost:54602/units',
withCredentials : true
});
.
.
}
最后像这样删除调用。
this.oDataStore.remove(this.state.selectedUnit.Oid).then(
(key) => {
alert(`${key} will be delete.`);
},
(error) =>
{
alert(`${error} occured.`);
}
);
任何帮助都会被接受。期待您的回复。
祝你有愉快的一天。
我跟踪了后端服务器项目中的输出。
面对,前端的DELETE请求首先发送OPTIONS请求as documented here。
我目前正在使用这样的中间件。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.
.
app.UseMiddleware<UnauthorizedRedirectMiddleware>();
.
}
并像那样配置 OPTIONS 请求。
public async Task InvokeAsync(HttpContext context)
{
if (context.Request.Method == "OPTIONS")
{
context.Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:3000");
context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
context.Response.Headers.Add("Access-Control-Allow-Methods", "DELETE");
context.Response.Headers.Add("Access-Control-Allow-Headers", "content-type");
context.Response.StatusCode = (int)HttpStatusCode.OK;
return;
}
.
.
.
}
2 天没有人回答。我被搜索了。
希望这些信息可以节省您的时间。
好好编码。
我遇到了从 devextreme odatastore 中删除实体的问题。
我在本地有两个项目,后端项目在 localhost:54602 上工作,前端项目 运行 在 localhost:3000 上工作(react 应用程序)
我可以在没有 CORS 问题的情况下请求数据。 (CORS 设置在后端完成)
但是当我尝试从 ODataStore 中删除实体并在调试模式下查看后端时
context.User.Identity.IsAuthenticated 变量更改为 false。请求失败。
Chrome 控制台输出在这里
对“http://localhost:54602/units(3)' from origin 'http://localhost:3000”处的 XMLHttpRequest 的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。
我阅读了所有关于 that link about CORS Preflight
我的 CORS 设置在这里。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
.
.
.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.
app.UseCors(options =>
{
options.WithOrigins("http://localhost:3000")
.WithMethods("GET", "POST", "PUT", "PATCH", "POST", "DELETE", "OPTIONS")
.AllowAnyHeader()
.AllowCredentials();
}
);
.
}
在 React 应用程序中,我正在创建这样的 oDataStore
export default class extends React.Component {
.
.
oDataStore = new ODataStore(
{
key: 'Oid',
version: 4,
url: 'http://localhost:54602/units',
withCredentials : true
});
.
.
}
最后像这样删除调用。
this.oDataStore.remove(this.state.selectedUnit.Oid).then(
(key) => {
alert(`${key} will be delete.`);
},
(error) =>
{
alert(`${error} occured.`);
}
);
任何帮助都会被接受。期待您的回复。
祝你有愉快的一天。
我跟踪了后端服务器项目中的输出。
面对,前端的DELETE请求首先发送OPTIONS请求as documented here。
我目前正在使用这样的中间件。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.
.
app.UseMiddleware<UnauthorizedRedirectMiddleware>();
.
}
并像那样配置 OPTIONS 请求。
public async Task InvokeAsync(HttpContext context)
{
if (context.Request.Method == "OPTIONS")
{
context.Response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:3000");
context.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
context.Response.Headers.Add("Access-Control-Allow-Methods", "DELETE");
context.Response.Headers.Add("Access-Control-Allow-Headers", "content-type");
context.Response.StatusCode = (int)HttpStatusCode.OK;
return;
}
.
.
.
}
2 天没有人回答。我被搜索了。
希望这些信息可以节省您的时间。
好好编码。