在 MVC 4 部署的项目中出现 404 错误

Getting 404 error in MVC 4 deployed project

该页面正在通过 JavaScript 向控制器操作发送带有过滤器值的请求:

 function ItemListModel(row) {
    var self = this;
    self.Date = row[0];
    self.Rank = row[1];
    self.UserID = row[2];
    self.Last = row[3];
    self.First = row[4];
    self.Middle = row[5];
    self.Serial = row[6];
    self.ECN = row[7];
    self.MAC = row[8];
    self.Clinical = row[9];
    self.Make = row[10];
    self.Model = row[11];
    self.Dept = row[12];
}

function Export() {
    var oSettings = oTable.fnSettings();
    var arr = new Array();
    $("tfoot input").each(function (i) {
        var test = $(this).val();
        arr.push(test);
    });
    var model = [];
    model = new ItemListModel(arr);
    window.location.href = "/Inventory/ExportSheet?model=" + JSON.stringify(model);
}

动作是:

 public void ExportSheet(string model)
    {
        ItemsListModel reportmodel = new ItemsListModel();
        if (model != null)
        {
            JavaScriptSerializer serl = new JavaScriptSerializer();
            reportmodel = (ItemsListModel)serl.Deserialize(model, typeof(ItemsListModel));
        }
        DataTable dt = ReportsRepository.GetItemsListParms(CleanReportParms(reportmodel));
        dt.Columns.Add("DateIssued");
        foreach (DataRow row in dt.Rows)
        {
            DateTime date = row.Field<DateTime>("Date Issued");
            string newdate = date.ToShortDateString();
            row.SetField("DateIssued", newdate);
        }
        dt.Columns.Remove("Date Issued");
        DumpExcel(dt, "itemlist");
    }

我正在使用 EPPlus 创建电子表格以下载到浏览器。这在我的开发箱上运行得非常好,但是一旦部署,我就会收到这个错误:

 The resource cannot be found. 
  Description: HTTP 404. The resource you are looking for (or one of its
 dependencies) could have been removed, had its name changed, or is    
 temporarily unavailable.  Please review the following URL and make sure 
 that it is spelled correctly. 

  Requested URL: /Inventory/ExportSheet

您是否将应用程序部署到 IIS 网站的根目录?此行要求您是:

window.location.href = "/Inventory/ExportSheet?....

我建议改用页面相对 URL,这样您的应用程序就可以部署在站点根目录下的某个位置。这将以不同的方式实现,具体取决于您为 JS 提供服务的方式。如果它位于服务器端页面的 script 标记中,并且您想路由到 MVC 操作:

window.location.href = 'Url.Action("ExportSheet")?model=' + JSON.stringify(model);

应该可以。