【发布时间】:2021-07-14 15:38:14
【问题描述】:
我整天都在查看有关 SO 的问题,但我觉得我在这里没有得到任何结果,所以我求助于社区。希望各位高手能帮帮我。 我的项目中有以下控制器操作:
[HttpGet("export")]
public IActionResult ExportData(string exportType, DateTime? fromDate, DateTime toDate, string search, bool? locked)
{
// Load the data from the db.
var data = LoadData(fromDate, toDate, locked, search);
bytes[] contentBytes = new byte[] { };
switch (exportType)
{
case "csv":
contentBytes = DataHelpers.ExportDataToCSV(data);
break;
// Other cases removed for brevity.
}
var content = new MemoryStream(contentBytes);
return File(content, MediaTypeNames.Application.Octet, "Report.csv");
}
老实说,我不确定导出是否有效,因为我在我的 ajax 查询中不断收到 HTTP 404:
function dataExport(type) {
const search = document.getElementById("GridSearch").value;
const fromDate = document.getElementById("startDate").value;
const toDate = document.getElementById("endDate").value;
const locked = document.getElementById("LockedStatus").checked;
let args = "?exportType=" + type + "&";
if (search !== null && search.length >= 1) {
args += "search=" + search + "&";
}
if (fromDate !== null && fromDate.length >= 1) {
args += "fromDate=" + fromDate + "&";
}
if (toDate !== null && toDate.length >= 1) {
args += "toDate=" + toDate + "&";
}
if (locked === true || locked === false) {
args += "locked=" + locked
}
if (args.endsWith("&")) {
args = args.substr(0, args.length - 1);
}
// Path is /[area]/[controller]/[action]
// Url output = /r/OtpLock/export?exportType=csv&search=foo
$.get("/r/OtpLock/export" + args, null, function (data) {
console.log(data);
});
}
我没想到这里会出现 404,因为它实际上只是在触发控制器操作,所以我想我的路由可能不起作用? app.UseEndpoints(端点 => { 端点.MapRazorPages(); 端点.MapControllerRoute( 名称:“默认”, 模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapAreaControllerRoute(
name: "areas",
areaName: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
我在某个地方犯了错误吗?是路由吗? 提前致谢!
【问题讨论】:
-
控制器上是否有包含
ExportData操作的[Route(...)]属性? -
我愿意...目前用
[Area("r")]和[Route("r/[controller]/[action]")]装饰 -
控制器名称是什么?
-
r中的Route不是一个额外的吗?试试/r/r/OtpLock/export看看是否有效 -
根据您的描述,如果您将
[HttpGet("export")]换成[ActionName("export")],它可能会起作用。
标签: javascript c# asp.net-core asp.net-core-mvc