SignalR 跨域问题(Vue3+Net6)

news2024/11/24 13:09:54

文章目录

  • 背景
  • 困难
      • ~~*调用 UseCors*~~
  • 解决办法
    • 环境
    • 错误信息
    • 解决方式
      • 部分代码
  • 问题分析

背景

使用前后端分离技术,前端使用Vue,部署在独立的服务器上,后端接口部署在另外一个服务器上。

困难

网上找了一个多小时的SignalR的跨域问题,包括微软官网的一些说明都是这样的(下面这段在.net6中不好用)

https://learn.microsoft.com/zh-cn/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#crossdomain

调用 UseCors

以下代码片段演示如何在 SignalR 2 中实现跨域连接。

在 SignalR 2 中实现跨域请求

以下代码演示如何在 SignalR 2 项目中启用 CORS 或 JSONP。 此代码示例使用 MapRunSignalR 而不是 MapSignalR,以便 CORS 中间件仅针对需要 CORS 支持 (的 SignalR 请求运行,而不是针对 .) Map 中指定的 MapSignalR路径上的所有流量运行,也可用于需要针对特定 URL 前缀运行的任何其他中间件,而不是针对整个应用程序运行。

**

using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;
namespace MyWebApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }
}

备注

  • 不要在代码中将 设置为 jQuery.support.cors true。

    不要将 jQuery.support.cors 设置为 true

    SignalR 处理 CORS 的使用。 将 设置为 jQuery.support.cors true 会禁用 JSONP,因为它会导致 SignalR 假定浏览器支持 CORS。

  • 连接到 localhost URL 时,Internet Explorer 10 不会将其视为跨域连接,因此即使尚未在服务器上启用跨域连接,应用程序也会在本地使用 IE 10。

  • 有关将跨域连接与 Internet Explorer 9 配合使用的信息,请参阅 此 StackOverflow 线程。

  • 有关将跨域连接与 Chrome 配合使用的信息,请参阅 此 StackOverflow 线程。

  • 示例代码使用默认的“/signalr”URL 连接到 SignalR 服务。 有关如何指定其他基 URL 的信息,请参阅 ASP.NET SignalR 中心 API 指南 - 服务器 - /signalr URL。

解决办法

环境

  • .net6
  • webapi
  • vue3

错误信息

Access to fetch at ‘https://localhost:6001/sr/warning_broadcast/negotiate?negotiateVersion=1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.

解决方式

添加跨域支持

   app.UseCors(opt =>
            {
                
 //不要允许所有源,因为这样编译会报错
                opt.WithOrigins("http://localhost:8080").AllowAnyHeader().AllowAnyMethod().AllowCredentials();
            });

部分代码


            var app = builder.Build();

            // Configure the HTTP request pipeline.
            //if (app.Environment.IsDevelopment())
            //{
            app.UseSwagger();
            app.UseSwaggerUI();
            //}

            app.UseStaticFiles(); 

            app.UseHttpsRedirection();

            app.UseAuthorization();
             
            app.MapControllers();

            app.UseCors(opt =>
            {
                opt.WithOrigins("http://localhost:8080").AllowAnyHeader().AllowAnyMethod().AllowCredentials();
            });
            #region SignalR
            app.MapHub<WarningBroadcastHub>("/sr/warning_broadcast");  
            #endregion 

            app.Run();

问题分析

  • 通过观察客户端的错误信息发现是一个post请求出现了跨域问题,所以可以确定问题的本质不是signalR的跨域问题,而是webapi的跨域问题。
  • 在配置跨域的时候需要注意,同一个域名下的不同端口也属于跨域,所以配置跨域源的时候要增加端口
  • 因为SignalR在连接前的post请求都是包含验证信息的,所以要支持AllowCredentials()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

textract OCR的安装使用

安装 pip install textract使用 在 Python 中&#xff0c;textract 是一个用于提取文本和信息的库。它提供了一个函数 textract.process()&#xff0c;用于处理不同类型的文档并提取文本内容。下面是 textract.process() 函数的各个参数的介绍&#xff1a; filename&#xf…

spring boot框架步骤

目录 1. 创建一个新的Spring Boot项目2. 添加所需的依赖3. 编写应用程序代码4. 配置应用程序5. 运行应用程序6. 编写和运行测试7. 部署应用程序 总结 当使用Spring Boot框架开发应用程序时&#xff0c;以下是一些详细的步骤&#xff1a; 1. 创建一个新的Spring Boot项目 使用…

ChatGPT在物流与运输行业的智能场景:智能调度和自动驾驶的前瞻应用

第一章&#xff1a;引言 随着人工智能技术的飞速发展&#xff0c;物流与运输行业正迎来一场革命。传统的调度和运输模式已经无法满足快速增长的物流需求和客户期望。在这一领域&#xff0c;ChatGPT作为一种先进的自然语言处理模型&#xff0c;具有巨大的潜力。本文将探讨ChatG…

【经验贴】多项目并行,如何解决资源管理这个难点?

随着公司业务的逐步增加&#xff0c;我手上管理的项目也多了起来&#xff0c;开始接触了一些中大型项目。但还没来得及算能拿到多少项目奖金&#xff0c;我就被接踵而至的管理难题压得喘不过气来&#xff0c;第一次感受到多项目并行带来的手忙脚乱的感觉。 我首先遇到了各种资…

分享 7 个不常用但有用的 CSS 小技巧

在这篇文章中&#xff0c;我想向您展示一些简单的CSS技巧&#xff0c;您可以在下一个项目中使用它们。让我们开始吧&#xff01; 1、-webkit-text-stroke 通过使用这个简单易用的属性&#xff0c;可以创建出酷炫的文字效果。它可以给文字添加描边。-webkit-text-stroke是-webki…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月19日论文合集)

文章目录 一、检测相关(7篇)1.1 Vehicle Occurrence-based Parking Space Detection1.2 Squeezing nnU-Nets with Knowledge Distillation for On-Board Cloud Detection1.3 MixedTeacher : Knowledge Distillation for fast inference textural anomaly detection1.4 Efficien…

金测评 听歌更自如的骨传导耳机,音质更出色,南卡Runner Pro 4S体验

我一直对骨传导耳机很感兴趣&#xff0c;因为这种耳机可以让我在户外运动的时候&#xff0c;既能享受音乐&#xff0c;又能保持对周围环境的敏感。为了获得更好的听歌体验&#xff0c;我的骨传导耳机换代频率很高&#xff0c;目前我用的是一款南卡Runner Pro 4S的骨传导耳机&am…

windows环境cmake引用boost库

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载源代码二、编译前准备1.操作系统2.gcc环境3.建立安装目录 三、开始编译1.解压源代码2.开始编译 四、开始使用1.Clion创建项目2.Boost版本差异3.Boost版…

数据结构Pta训练题函数题详解

​ pta网站&#xff1a;PTA | 程序设计类实验辅助教学平台 (pintia.cn) 文章内容较长&#xff0c;建议搭配目录使用 点击直达快乐 6-1 线性表元素的区间删除解析&#xff1a; 6-2 有序表的插入解析&#xff1a; 6-3 合并两个有序数组解析 6-4 顺序表操作集解析 6-5 递增的整数…

Linux磁盘空间占满,但搜不到大文件

使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&#xff0c;但是通过 du -sh 找不到大文件&#xff0c;可能是因为有一些进程正在写入磁盘&#xff0c;但是这些文件已经被删除&#…

与用户同行!2023卡萨帝开启高端生活方式新时代

6月20日&#xff0c;2023思享荟暨卡萨帝品牌升级发布会在重庆国际博览中心举行。在经历了高端产品引领、高端品牌引领、高端场景引领后&#xff0c;卡萨帝启动全新品牌升级&#xff0c;持续与用户同行&#xff0c;开启高端生活方式引领的新时代。 现场&#xff0c;海尔智家副总…

千万不能小瞧的PCB半孔板

PCB半孔是沿着PCB边界钻出的成排的孔&#xff0c;当孔被镀铜时&#xff0c;边缘被修剪掉&#xff0c;使沿边界的孔减半&#xff0c;让PCB的边缘看起来像电镀表面孔内有铜。 模块类PCB基本上都设计有半孔&#xff0c;主要是方便焊接&#xff0c;因为模块面积小&#xff0c;功能…

一键打车/代驾小程序源码app+司机入住uniapp+thinkphp

一键打车/代驾小程序源码app司机入住uniappthinkphp 系统技术架构 开发环境&#xff1a;PHP7.2 mysql5.7 后端&#xff1a;thinkphp 前端&#xff1a;uniapp 后台管理&#xff1a;PC端 司机端&#xff1a;安卓端 苹果端 乘客端&#xff1a;安卓端 苹果端 小程序端 功…

ai聊天推荐这些工具,告诉你ai聊天网站有哪些

“ai聊天网站有哪些”是一个常见的问题&#xff0c;当今互联网时代&#xff0c;人工智能技术正在不断发展&#xff0c;ai聊天网站和软件成为了人们交流和获取信息的重要工具。本文将为您介绍一些知名的ai聊天网站和软件&#xff0c;让您快速了解“ai聊天网站有哪些”这个问题。…

按钮权限布局(设置 element中 tree 树的排列)

页面中使用 <el-buttontype"text"click"edit(slotProps.date)"v-btn-key"[client:clue:update]">编辑</el-button><el-buttontype"text"click"del(slotProps.date)"v-btn-key"[client:clue:delete]&quo…

想读2023级中外合作办学硕士,人大女王金融硕士国际班或许是你最后的机会了

已经进入6月下旬&#xff0c;大部分院校中外合作办学在职研究生的招生已经截止&#xff0c;部分同学还在犹豫纠结中&#xff0c;各大高校的名额就已经都满了。想要读2023级还有可能吗&#xff1f;中国人民大学与加拿大女王大学金融硕士国际班还能给你一次机会。 虽然我们无法确…

【2023 阿里云云计算工程师 ACP 认证练习题库】03、ECS 知识点题库(下)

目录 单选题 1 2 3 答案与解析 4 ​5 6 ​答案与解析 7 8 答案与解析 9 ​答案与解析 10 ​答案与解析 11 12 13 14 15 16 答案与解析 17 18 19 20 21 22 23 24 25 ​答案与解析 26 27 28 29 ​答案与解析 …

校园外卖平台怎么做

校园外卖小程序是一款基于智能手机的移动应用&#xff0c;提供订餐、支付、配送等服务。它能为顾客提供丰富的美食选择&#xff0c;为商家提供进一步发展业务的机会&#xff0c;同时骑手也有机会赚取额外的收入。 一、 用户端功能介绍 1. 地图定位&#xff1a;用户可以利用小…

渐进式学习:如何用R和GO富集可视化捕捉生命的关键信号?

一、引言 生命科学中的数据分析和可视化是一个具有挑战性的领域。随着技术和理论的不断发展&#xff0c;研究人员需要处理越来越复杂和庞大的数据集&#xff0c;以研究生物体在不同尺度上的结构和功能&#xff0c;探索不同生物过程和疾病的机制。在这个领域&#xff0c;GO&…

【MySQL】一文带你了解数据过滤

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…