我用的是ASP.NET Core7.0做的后台api,在解决了跨域问题(这个问题在官网上就有答案https://learn.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-7.0)
为了方便 阅读,我再讲一下
在里progam里面增加代码(黄色代码),代码格式我就把不变的放到一起了
解决完这个之后,因为要用session所以又增加了对session的支持(绿色部分),这个也可以在官网或者其他地方找到
然后解决需要session 的id 一致问题,首选在服务端放开带cookie的验证,红色部分,由于加了验证,导致AllowAnyOrigin()错误,所以改成了.SetIsOriginAllowed(_ => true),
这样服务端就解决了
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options => {
options.AddPolicy(name: MyAllowSpecificOrigins,
policy =>
{
policy.WithOrigins("*", "*", "*")
//.AllowAnyOrigin()
.SetIsOriginAllowed(_ => true)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
builder.Services.AddDistributedMemoryCache();//添加session支持,同时要加这句
///设置session
builder.Services.AddSession(options =>
{
options.IdleTimeout = System.TimeSpan.FromSeconds(120);//设置session的过期时间
//options.Cookie.Name = ".AdventureWorks.Session";
//options.Cookie.HttpOnly = true;
options.Cookie.HttpOnly = true;//设置在浏览器不能通过js获得该cookie的值
options.Cookie.IsEssential = true;
});
///下面这些不用的可以去掉
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddHttpContextAccessor();
builder.Services.AddMvc();
builder.Services.AddControllers();
var app = builder.Build(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting();
app.UseCors(MyAllowSpecificOrigins);
app.UseAuthorization();
app.UseSession();//UseSession配置在UseMvc之前
app.MapControllers(); app.Run();
然后是在vue+axiso的时候遇到问题
首先在axiso引用的地方增加 以下代码,
axios.defaults.withCredentials =true; 很多地方都写这样就直接可以解决,然后我试了之后,发现如果直接调用后端地址进去之后发现session的Id问题还是未解决 最后又是跟踪文件头又是返回的跟踪还是没解决, 最后无奈之下还是试了试代理 在vue.config.js 中增加代理,如下代码后,问题解决 ,最后我想问一下这问题产生的原理是啥啊,哪位大神看到的话给个答案module.exports = { devServer: { proxy: { '^/api': { target: 'https://localhost:7164', pathRewrite: {'^/api': ''} ,ws: true ,changeOrigin: true } } },.........后面代码省了
标签:vue,builder,options,Services,sessionID,session,后台,true,app From: https://www.cnblogs.com/dugubingxun/p/17972689