ValidateRequest="false" 无效

本文解决了一个在ASP.NET4.0版本中遇到的发布系统异常问题,通过调整web.config文件中的requestValidationMode参数来允许含有HTML标记的输入。

在做牛腩新闻发布系统的时候,部分同学可能会遇到这样的情况:

从客户端(ContentPlaceHolder1_m_ContentPlaceHolder_ftbContent="<P>fdfdf\</P>
<P>df...")中检测到有潜在危险的 Request.Form 值。

说明:ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。如果此类型的输入适用于您的应用程序,则可包括明确允许的网页中的代码。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=212874。

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(ContentPlaceHolder1_m_ContentPlaceHolder_ftbContent="<P>fdfdf\</P>
<P>df...")中检测到有潜在危险的 Request.Form 值。

而牛腩老师给出的是在页面级别设置ValidateRequest="false"

但是,很可惜我设置之后并没有用。


我们可以看到,在错误页面有给出一个参阅网址



打开后我们找到了原因



显然,根据提示以上设置仅对ASP.NET4.0以下有效。在ASP.NET4.0版本上,所有我们需要在配置文件中将其改为低版本才有效:

打开web.config

添加以下代码

<span style="font-size:18px;">	<system.web>
    <httpRuntime requestValidationMode="2.0">
    </httpRuntime></span>

如图:



然后再添加ValidateRequest="false"就能够正确的使用了。

所以说,我们不仅要会百度搜索,还要善于利用软件本身给出的帮助文件,二者结合才能更好的找到解决方案。


报错:[vue/compiler-sfc]Unexpected(376:0)token D:/桌面/开发项目/vue3-uni-Project01/pages/workbench/mycp/373fetchSurveyData();374fetchBdrList();375});376377 </script> 我的代码如下:<script setup> import { ref, reactive, onMounted, computed } from 'vue'; import { onShow } from '@dcloudio/uni-app'; // 响应式数据 const surveyList = ref([]); const total = ref(0); const loading = ref(false); const formData = reactive({ dcWjTitle: '', dcId: [], dcDept: '', state: null }); const bdrOptions = ref([]); const bdrLoading = ref(false); const pagination = reactive({ current: 1, size: 10, total: 0 }); // 被测评人选择器相关 const bdrSearchKeyword = ref(''); const showBdrList = ref(false); const filteredBdrOptions = ref([]); const showBdrPlaceholder = ref(true); // 状态选择器相关 const stateOptions = ref([ { label: '全部', value: null }, { label: '已提交', value: 1 }, { label: '未提交', value: 0 } ]); const showStateList = ref(false); // 计算属性 const selectedBdrLabel = computed(() => { if (formData.dcId.length === 0) return ''; const selected = bdrOptions.value.find(b => b.value === formData.dcId[0]); return selected ? selected.label : ''; }); const getStateLabel = (value) => { const state = stateOptions.value.find(s => s.value === value); return state ? state.label : '全部'; }; // 被测评人选择器方法 const handleBdrFocus = () => { showBdrList.value = true; showBdrPlaceholder.value = false; resetBdrFilter(); }; const handleBdrInput = (e) => { bdrSearchKeyword.value = e.detail.value; resetBdrFilter(); const handleBdrSelect = (item) => { formData.dcId = [item.value]; showBdrList.value = false; bdrSearchKeyword.value = ''; showBdrPlaceholder.value = false; }; const toggleBdrList = () => { showBdrList.value = !showBdrList.value; if (showBdrList.value) { resetBdrFilter(); } }; // 重置被测评人过滤条件 const resetBdrFilter = () => { bdrSearchKeyword.value = ''; filterBdrOptions(); }; // 状态选择器方法 const handleStateSelect = (state) => { formData.state = state.value; showStateList.value = false; }; const toggleStateList = () => { showStateList.value = !showStateList.value; }; // 过滤被测评人选项 const filterBdrOptions = () => { if (!bdrSearchKeyword.value) { // 默认显示前5项,其他隐藏 filteredBdrOptions.value = bdrOptions.value.map((item, index) => ({ ...item, visible: index < 5 // 添加可见性标记 })); return; } const keyword = bdrSearchKeyword.value.toLowerCase(); filteredBdrOptions.value = bdrOptions.value .filter(item => item.label.toLowerCase().includes(keyword)) .map(item => ({...item, visible: true})); // 搜索时全部可见 }; // 获取问卷数据 const fetchSurveyData = async () => { try { loading.value = true; const token = uni.getStorageSync('token'); if (!token) { uni.showToast({ title: '请先登录', icon: 'none' }); uni.redirectTo({ url: '/pages/login/login' }); return; } const res = await uni.request({ url: 'http://172.26.26.43/dev-api/wjdc/wj/listTx', method: 'GET', data: { pageNum: pagination.current, pageSize: pagination.size, dcWjTitle: formData.dcWjTitle, dcId: formData.dcId.join(','), dcDept: formData.dcDept, state: formData.state }, header: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, timeout: 10000 // 增加超时设置 }); // 完整的响应日志 // console.log('API响应:', res); // 处理不同的响应格式 let responseData = null; // 处理 uni.request 的不同返回值格式 if (Array.isArray(res)) { // uni-app 返回数组格式 [error, response] if (res[0]) throw res[0]; // 如果有错误对象 responseData = res[1].data; } else { // 直接返回对象格式 responseData = res.data; } // 检查响应状态码 if (responseData?.code === 200) { surveyList.value = responseData.rows || []; total.value = responseData.total || 0; pagination.total = responseData.total || 0; } else { // 更详细的错误信息 const errorMsg = responseData?.msg || `API返回非200状态: ${responseData?.code || '未知'}`; throw new Error(errorMsg); } } catch (error) { console.error('请求错误详情:', error); // 更精确的错误分类 let userFriendlyMsg = '加载问卷数据失败'; if (error.errMsg?.includes('timeout')) { userFriendlyMsg = '请求超时,请检查网络连接'; } else if (error.errMsg?.includes('404')) { userFriendlyMsg = 'API地址不存在,请联系管理员'; } else if (error.errMsg?.includes('401')) { userFriendlyMsg = '登录已过期,请重新登录'; uni.redirectTo({ url: '/pages/login/login' }); } else if (error.message) { userFriendlyMsg = error.message; } uni.showToast({ title: userFriendlyMsg, icon: 'none', duration: 3000 }); } finally { loading.value = false; } }; // 清除被测评人选择的方法 const handleClearBdr = (e) => { e.stopPropagation(); // 阻止事件冒泡 formData.dcId = []; bdrSearchKeyword.value = ''; showBdrList.value = false; showBdrPlaceholder.value = true; }; // 获取被测评人列表 const fetchBdrList = async () => { try { const token = uni.getStorageSync('token'); if (!token) { console.warn('未获取到token,跳过获取被测评人列表'); return; } // 打印请求开始信息 // console.log('开始获取被测评人列表...'); const res = await uni.request({ url: 'http://172.26.26.43/dev-api/wjdc/wj/getBdrList', method: 'GET', header: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, timeout: 8000 }); // 详细记录原始响应 // console.log('被测评人API原始响应:', res); // 统一处理uni-app不同平台的响应格式 let response = null; if (Array.isArray(res)) { // 小程序格式 [error, response] if (res[0]) { throw res[0]; } response = res[1]; } else { // H5格式 { data, statusCode, ... } response = res; } // 检查HTTP状态码 if (response.statusCode !== 200) { throw new Error(`HTTP错误: ${response.statusCode}`); } // 解析响应体 const responseBody = response.data; // console.log('API响应体:', responseBody); // 处理不同的API响应结构 let data = []; if (Array.isArray(responseBody)) { // 情况1: 直接返回数组 data = responseBody; } else if (responseBody.data && Array.isArray(responseBody.data)) { // 情况2: { data: [...] } data = responseBody.data; } else if (responseBody.rows && Array.isArray(responseBody.rows)) { // 情况3: { rows: [...] } data = responseBody.rows; } else if (responseBody.result && Array.isArray(responseBody.result)) { // 情况4: { result: [...] } data = responseBody.result; } else { console.error('无法识别的API响应格式:', responseBody); throw new Error('无效的API响应格式'); } // 转换数据格式 bdrOptions.value = data.map(item => { // 调试输出每个项目 // console.log('被测评人原始项:', item); // 尝试可能的字段组合 return { label: item.dcName || item.name || item.username || item.nickname || '未知名称', value: item.dcId || item.id || item.userId || item.value || null }; }); // console.log('转换后的被测评人选项:', bdrOptions.value); // 初始化过滤后的选项 filteredBdrOptions.value = [...bdrOptions.value]; } catch (error) { console.error('获取被测评人失败:', error); // 更详细的错误处理 let errorMsg = '获取被测评人失败'; if (error.errMsg) { if (error.errMsg.includes('401')) { errorMsg = '认证失败,请重新登录'; uni.redirectTo({ url: '/pages/login/login' }); } else if (error.errMsg.includes('timeout')) { errorMsg = '请求超时,请检查网络并重新登录'; uni.redirectTo({ url: '/pages/login/login' }); } else if (error.errMsg.includes('404')) { errorMsg = 'API地址已过期,请重新登录'; uni.redirectTo({ url: '/pages/login/login' }); } else if (error.errMsg.includes('fail')) { errorMsg = `网络请求失败: ${error.errMsg},请联系管理员`; } } else if (error.message) { errorMsg = error.message; } uni.showToast({ title: errorMsg, icon: 'none', duration: 3000 }); } finally { // 添加加载状态管理 bdrLoading.value = false; } }; // 搜索按钮处理 const handleSearch = () => { pagination.current = 1; fetchSurveyData(); }; // 重置按钮处理 const handleReset = () => { formData.dcWjTitle = ''; formData.dcId = []; formData.dcDept = ''; formData.state = null; bdrSearchKeyword.value = ''; showBdrList.value = false; showStateList.value = false; showBdrPlaceholder.value = true; handleSearch(); }; // 编辑/查看问卷 const handleView = (item) => { uni.navigateTo({ url: `/pages/workbench/mycp/operation/operation?id=${item.dcWjId}` }); }; // 分页大小改变 const handleSizeChange = (e) => { pagination.size = e.detail.value; pagination.current = 1; fetchSurveyData(); }; // 页码改变 const handlePageChange = (page) => { pagination.current = page; fetchSurveyData(); }; // 刷新数据 const refreshData = () => { pagination.current = 1; fetchSurveyData(); }; // 页面显示时加载数据 onShow(() => { fetchSurveyData(); fetchBdrList(); }); </script>
08-07
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值