You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:49:51