添加了validaterequest=false 为什么还是报错

本文探讨了一个在Web应用迁移版本过程中遇到的错误问题,解释了问题的成因在于应用部署环境与源代码版本不匹配,通过在web.config文件中调整HTTP运行时请求验证模式解决了错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一些平时见看上去很简单的问题,一些简单的事情,也许在复杂的环境中就看上去不那么简单了.

今天遇到一个错误:话说是客户端存在潜在的危险...这样的错误我不是第一次遇到了,所以我以为很简单的在page 中添加了一个validaterequest=false 在运行页面 还是报相同的错误,于是就想不明白了,这是什么情况..?

开始在网上查资料 大致都是相同的一些回答:第一种解决方案:在page中添加validaterequest=false 第二种就是在web.config <con>中添加一个属性.而且都是很统一的答案,让我以为是我自己错了,在web.config中添加了属性 并且检查了page中的的确确是有的,再运行还是报错.

茫然....

查查看为什么出现了错误吧:

在csdn的一个问题上找到了答案:

我的问题和http://topic.youkuaiyun.com/u/20110623/14/a23e6ff5-2c92-4896-870b-2be525548433.html他得是一样的 项目是3.5的 但是发布到的却是4.0的版本上

在web.config中添加了:

<System.Web>配置节中添加如下一个配置呢?
<httpRuntime requestValidationMode="2.0" />

就完成了.

也许问题并不复杂而是一个简单的问题套在了一个简单的外衣里.变得让我有些迷惑吧!

已经知道后端 CategoryController为 @GetMapping(“/tree”) public Result getCategoryTree() { List<Category> treeData = categoryService.getCategoryTree(); return Result.success(); }且已经知道前端代码的统一错误返回结果如下所示import axios from “axios”; import { ElMessage } from “element-plus”; const request=axios.create({ //跟有毛病似的,非要我从浏览器里面复制地址给你,手写的都不行,真是服了 baseURL:‘http://localhost:8080’, timeout:30000}) //request拦截器,可以自请求发送前对请求做一些处理 request.interceptors.request.use(config =>{ config.headers[‘Content-Type’]=‘application/json;charset=utf-8’; let user= JSON.parse(localStorage.getItem(‘xm-pro-user’)||‘{}’)//跟自己的文件名一致 config.headers[‘token’]=user.token return config },error=>{ return Promise.reject(error) }); request.interceptors.response.use( // 成功响应处理(保持原代码不变,仅插入新逻辑) response => { let res = response.data; if (typeof res === ‘string’) { res = res ? JSON.parse(res) : res } /* 插入新逻辑开始 / // 处理 403 业务状态码 if (res.code === ‘403’) { ElMessage.error(‘权限不足,拒绝访问’) // 可添加跳转逻辑 location.href = ‘/no-permission’ } / 插入新逻辑结束 / if (res.code === ‘401’) { ElMessage.error(res.msg) setTimeout(() => { location.href = ‘/login’ }, 500) } else { return res; // 保持原有返回逻辑不变 } }, // 错误响应处理(保持原代码不变,仅插入新逻辑) error => { / 插入新逻辑开始 / // 处理 403 HTTP 状态码 if (error.response?.status === 403) { ElMessage.error(‘身份认证过期,请重新登录’) setTimeout(() => { location.href = ‘/login’ }, 1500) } / 插入新逻辑结束 */ // 以下为完全保持原样的代码 if (error.response.status === 404) { ElMessage.error(‘未找到请求接口’) } else if (error.response.status === 500) { ElMessage.error(‘系统异常,请查看后端控制台报错’) } else { console.error(error.message) } return Promise.reject(error)}) export default request且已经知道前端代码的统一错误返回结果写法如下所示const add=()=>{ formRef.value.validate((valid)=>{ if(valid){//验证通过的话再新增 request.post(‘/category/add’,data.form).then(res=>{ if(res.code===‘200’){ data.formVisible=false ElMessage.success(‘新增成功’) load()//新增后重新加载最新的数据 }else{ ElMessage.error(res.msg) } }) } })数据库表结构为CREATE TABLE category ( id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘课程分类id’, title varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘课程分类标题’, parent_id int(11) DEFAULT NULL COMMENT ‘父ID’, sort int(10) unsigned DEFAULT ‘0’ COMMENT ‘排序字段’, PRIMARY KEY (id) ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=‘课程分类’;给出vue3树形结构数据展示全部完整代码而且全部在Category.vue中,要求不报错且能顺利展示出数据
03-22
<script lang="ts" setup> import { ref, onMounted } from 'vue' import type { ElForm } from 'element-plus' import request from '@/utils/request' import { ElMessage, ElMessageBox } from 'element-plus' interface CategoryEntity { id: number title: string parentId: number | null children?: CategoryEntity[] } interface ResponseStructure<T = any> { code: number msg?: string data: T // ⌈核心调整:确保数据结构匹配⌋ } const rules = { title: [ { required: true, message: '请输入分类名称', trigger: 'blur' } ] } // 状态管理 const tableData = ref<CategoryEntity[]>([]) const searchTitle = ref('') const formVisible = ref(false) const currentId = ref<number | null>(null) const form = ref({ title: '', parentId: null as number | null }) const formRef = ref<InstanceType<typeof ElForm>>() // ⌈关键修复:增强类型安全的数据加载⌋ const load = async () => { try { const response = await request.get<ResponseStructure<CategoryEntity[]>>('/category/tree', { params: { title: searchTitle.value } }) // ⌈重要调整:检查响应结构有效性⌋ if (response.data?.code === 200 && Array.isArray(response.data.data)) { tableData.value = formatTreeData(response.data.data) } else { throw new Error(response.data?.msg || '无效的响应结构') } } catch (error: any) { // ⌈错误处理优化:增强错误信息可读性⌋ const status = error.response?.status const message = status ? `请求错误 (${status})` : error.message || '网络连接异常' ElMessage.error(message) } } // ⌈树数据处理:添加空值保护⌋ const formatTreeData = (data: CategoryEntity[]): CategoryEntity[] => { return data.map(item => ({ ...item, children: item.children?.length ? formatTreeData(item.children) : [] })) } // ⌈分类查找:添加类型断言⌋ const findCategoryById = (id: number): CategoryEntity | undefined => { const find = (items: CategoryEntity[]): CategoryEntity | undefined => { for (const item of items) { if (item.id === id) return item if (item.children) { const found = find(item.children) if (found) return found } } } return find(tableData.value || []) } // ⌈表单提交:增加字段校验⌋ const submitForm = () => { formRef.value?.validate(async valid => { if (valid) { try { const payload = { ...form.value, id: currentId.value } const url = currentId.value ? '/category/update' : '/category/add' const res = await request.post<ResponseStructure>(url, payload) if (res.data.code === 200) { ElMessage.success(currentId.value ? '修改成功' : '新增成功') formVisible.value = false load() } else { throw new Error(res.data.msg) } } catch (error: any) { ElMessage.error(error.message || '操作失败') } } }) } // 初始化加载 onMounted(() => { load() }) // 显示表单对话框 const showFormDialog = (id: number | null = null) => { currentId.value = id if (id) { const findItem = findCategoryById(id) if (findItem) { form.value = { title: findItem.title, parentId: findItem.parentId } } } else { form.value = { title: '', parentId: null } } formVisible.value = true } // 删除操作 const handleDelete = (id: number) => { ElMessageBox.confirm('确认删除该分类?', '警告', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(async () => { try { const res = await request.post<ResponseStructure>('/category/delete', { id }) if (res.data.code === 200) { ElMessage.success('删除成功') load() } else { ElMessage.error(res.data.msg || '删除失败') } } catch (error) { ElMessage.error('删除失败') } }).catch(() => null) } // 重置搜索 const reset = () => { searchTitle.value = '' load() } </script>显示无效的响应结构,重新给出全部代码要不不报错,能顺利展示数据
03-23
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值