asp.net mvc 重定向问题的解决方式

前端ajax发起请求,在后端接口中重定向,结果报错,无法跳转

Ajax实际上是通过XMLHttpRequest来向服务器发送异步请求的,从服务器获取数据,然后使用JS来更新页面,这也就是常说的局部刷新实现方式,所以Ajax请求之后,服务器返回的都是纯文本流,客户端的浏览器在获取Ajax异步结果时,不是直接显示在页面上,而是要通过JS来进行处理,JS处理完以后才能显示在页面上。此处对应的JS处理就是在Ajax回调函数中执行window.location.href=path

在请求头信息中有这么一条:X-Requested-With: XMLHttpRequest,这就表明这是一个AJAX请求,我们可以通过这一信息来辨别请求是来自一般的HTTP请求还是Ajax请求。

原因:
X-Requested-With: XMLHttpRequest 表示是ajax的异步请求,而ajax的异步请求不能直接重定向,所以需要特殊处理一下

前端处理

  • 自己创建redirect.js,文件内容如下
  • function  redirectHandle(xhr) {var url = xhr.getResponseHeader("redirectUrl");var enable = xhr.getResponseHeader("enableRedirect");if((enable == "true") && (url != "")){var win = window;while(win != win.top){win = win.top;}win.location.href = url;}
    }$(function () {$(document).ajaxComplete(function (event, xhr, settings) {console.log("ajaxComplete  adffdafadsaf")redirectHandle(xhr);})
    })
    

    在页面中引用该js

  • <script src="/static/redirect.js"></script>
    

    然后再次使用 ajax请求,就会自动走redirect.js中的重定向判断了

  • 后端也要处理

  • 如果是前后端不分离项目,注意配置mvc静态资源路劲
  • spring:mvc:static-path-pattern: /static/**    # 静态资源的请求还是会走过滤器、拦截器,然后直接返回该资源
    

  • 添加工具类
  • 使用RedirectUtil#redirect方法进行重定向处理

  •  public class RedirectUtil{public static void Redirect(HttpContextBase httpContext, string url){//获取请求报文头信息(异步请求会包含这个头部信息)string header = httpContext.Request.Headers["X-Requested-With"].ToString();//判断请求客户端报文头(是否包含)if (string.Equals(header, "XMLHttpRequest")){//用来验证用户是否登陆进行页面跳转//添加响应报文头,并发送至客户端SendRedirect(httpContext, url);}else{//对程序发生错误进行页面跳转//添加响应报文头,并发送至客户端SendRedirect(httpContext, url);}}/// <summary>/// 添加响应报文头/// </summary>/// <param name="filterContext"></param>/// <param name="url"></param>private static void SendRedirect(HttpContextBase httpContext, string url){// 写入响应头,然后前端去判断  enableRedirect=true则进行跳转httpContext.Response.Headers.Add("redirectUrl", url);httpContext.Response.Headers.Add("enableRedirect", "true");httpContext.Response.End();}}

    然后调用即可

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平衡二叉树的构建(递归

目录 1.概念&#xff1a;2.特点&#xff1a;3.构建方法&#xff1a;4.代码&#xff1a;小结&#xff1a; 1.概念&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;也称为AVL树&#xff0c;是一种二叉树&#xff0c;它满足每个节点的左子树和右…

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中&#xff0c;常常有需要重定向转发的需求&#xff0c;比如企业更换了域名&#xff0c;但又要保证之前的域名能访问&#xff0c;这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置&#xff0c;今天继续来补…

云计算:现代技术的基本要素

众所周知&#xff0c;在儿童教育的早期阶段&#xff0c;幼儿园都会传授塑造未来行为的一些基本准则。 今天&#xff0c;我们可以以类似的方式思考云计算&#xff1a;它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

C++力扣题目344--反转字符串

编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s ["h","e…

【序列化和反序列化】

&#x1f341;什么是序列化和反序列化&#xff1f; &#x1f341;典型解析&#x1f341;拓展知识仓&#x1f341;如何进行序列化和反序列化&#x1f341;未实现Serializable&#xff0c;可以序列化吗? &#x1f341;典型解析 在Java中&#xff0c;我们可以通过多种方式来创建对…

一体机定制_工控触控一体机安卓主板方案

工控一体机是一种集成化的硬件方案&#xff0c;采用了联发科MT8768八核芯片和12nm制程工艺。该芯片拥有2.0GHz的主频和IMG PowerVR GE8320图形处理GPU&#xff0c;具备强大的视频处理能力&#xff0c;并且兼容大部分的视频格式和解码能力。工控一体机搭载了Android 9.0操作系统…

如何分析 JVM 内存瓶颈浅谈

背景&#xff1a; 当操作系统内存出现瓶颈时&#xff0c;我们便会重点排查那个应用占用内存过大。对于更深一步分析内存的使用&#xff0c;就进一步去了解内存结构&#xff0c;应用程序使用情况&#xff0c;以及内存如何分配、如何回收&#xff0c;这样你才能更好地确定内存的…

在MongoDB中使用数组字段和子文档字段进行索引

本文主要介绍在MongoDB使用数组字段和子文档字段进行索引。 目录 MongoDB的高级索引一、索引数组字段二、索引子文档字段 三、注意事项 MongoDB的高级索引 MongoDB是一个面向文档的NoSQL数据库&#xff0c;它提供了丰富的索引功能来加快查询性能。除了常规的单字段索引之外&am…

042、文本与语言模型

之——nlp基础 目录 之——nlp基础 杂谈 正文 1.文本预处理 2.语言模型 3.语言模型实现 杂谈 在语言模型中&#xff0c;需要对文本进行预处理&#xff0c;进行数字化的一系列操作&#xff0c;而后才能进行网络的拟合。 以前的相关&#xff1a;词性判断 正文 1.文本预处…

maven下载jar包失败

配置国内镜像 设置国内的仓库,比如: <!--阿里仓库--><mirror><id>alimaven</id><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public/</url><mirrorOf>central</mirrorOf></mirror>…

高并发接口限流

文章目录 简介实现限流常见的算法4种1、计数器限流算法2、滑动窗口限流算法3、漏桶限流算法4.令牌桶限流算法 接口限流方案限流算法对比、网关限流实践总结Redis实现限流的几种方式基于Redis的setNX的操作&#xff08;固定时间算法&#xff09;基于Redis的数据结构zset(滑动窗口…

家校互通小程序实战开发01需求分析

目录 1 角色的划分2 用例分析3 创建业务数据源4 创建登录用户数据源总结 最近几年&#xff0c;随着移动互联网的深入发展&#xff0c;我们的日常生活和工作和微信已经紧密绑定。其实&#xff0c;有时候生活和工作的界限已经不明显&#xff0c;在我们的微信好友里既有家人、朋友…