将index.aspx置于App_Code目录通过AJAX调用遇IIS 404.8错误求助
解决ASP.NET AJAX调用404.8错误的问题
哦,这个问题我太熟悉了!你遇到的404.8错误根本原因是App_Code目录在ASP.NET里有特殊作用,IIS默认会拦截对这个目录的外部请求,而且你把aspx页面放在这里本身就不符合ASP.NET的目录规范——App_Code是专门用来存放可编译的类文件(比如后台逻辑的.cs文件)的,不是用来放API端点或前端页面的。
怎么解决?分三步来:
1. 移动你的API页面文件
把App_Code目录里的index.aspx和index.aspx.cs移到网站根目录(和你的index.html同级),或者你也可以创建一个专门的API目录(比如/API/)来存放这些文件,这样IIS就能正常处理请求了。
调整后的文件结构应该是这样:
- 网站根目录
- index.html
- index.aspx
- index.aspx.cs
2. 修改AJAX请求的URL
原来的AJAX请求指向App_Code/,现在要改成新的文件路径。比如移到根目录后,URL要改成index.aspx:
修改index.html里的AJAX代码:
<script type="text/javascript"> window.onload = function () { $.ajax({ url: 'index.aspx', // 这里改成新的路径 data: { api: 'test' }, // 用对象形式传递参数更清晰,jQuery会自动处理编码 dataType: 'text', type: 'POST', contentType: 'application/x-www-form-urlencoded', success: function (data) { console.log("请求成功:", data); alert(data); // 可以弹出结果验证 }, error: function (xhr, status, error) { console.error("请求出错:", status, error); console.log("服务器返回内容:", xhr.responseText); } }); }; </script>
3. 优化你的API后台代码(可选但推荐)
因为这是一个API接口,不需要输出完整的HTML页面,所以可以简化你的index.aspx和后台代码,避免输出多余的内容:
简化后的index.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="WebApplication4.index" runat="server" %> <%-- 不需要任何HTML内容,因为这是API接口 --%>
优化后的index.aspx.cs:
using System; using System.Web; using System.Web.UI; namespace WebApplication4 { public partial class index : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 禁用视图状态,API不需要这个 EnableViewState = false; // 设置响应类型为纯文本,避免浏览器误解 Response.ContentType = "text/plain"; string strAPI = Request.Form["api"]; switch(strAPI) { case "test": Response.Write("It worked!"); break; default: Response.Write("未知的API请求"); break; } // 结束响应,防止ASP.NET输出默认的页面HTML框架 Response.End(); } } }
为什么App_Code不能放aspx?
再补充一下:App_Code是ASP.NET的特殊目录,里面的类文件会被自动编译到程序集中,IIS的**请求过滤模块(Request Filtering)**默认会拒绝外部请求访问这个目录,所以不管你放什么页面进去,都会触发404.8错误,这是ASP.NET的安全设计之一。
内容的提问来源于stack exchange,提问作者User10505
相关产品推荐
相关产品推荐

