在我的Asp.net MVC应用程序中,我正在使用Jquery数据表来显示数据。我的问题是在这里您可以看到我使用数据表内的链接打开文件。当文件在下载文件夹404服务器中不可用时,显示错误,而不是我需要定向另一个页面。如何检查此数据表中文件是否可用。文件类型为.html
<script>
$("#cribTable").DataTable({
"ajax": {
"url": "/CribManual/GetAllDownloadedCribs",
"type": "GET",
"processing": true,
"datatype": "JSON",
"serverSide": true
},
"columns": [
{
"data": "ID", "render": function (data) {
return `<button type="button" data-toggle="confirmation" data-title="Are you sure?" href='@Url.Action("DeleteCrib", "CribManual")/${data
}'" class="btn btn-danger">Delete</button>`;
},
orderable: false
},
{ "data": "CUS_NAME" },
{ "data": "CUS_NIC" },
{ "data": "STATUS" },
{ "data": "LOCATION" },
{
"data": "LOCATION", 'render': function (data, type, full, meta) {
return '<a href="/Downloads/' + data + '">Read File</a>';
}
}
]
});
</script>
答案 0 :(得分:0)
不建议使用此解决方案,但是您可以在执行AJAX调用时捕获错误代码。参考:Capture 404 status with jQuery AJAX
这可能看起来像这样:
{
"data": "LOCATION",
"render": function (data, type, full, meta) {
var dUrl = "/Downloads/" + data;
var result = $("<a>").html("Read File");
$.ajax({
cache: false,
url: dUrl,
success: function(dat, stat, xhr){
result.attr("href", dUrl);
},
error: function (xhr, stat, err){
if(xhr.status==404) {
result.attr("href", "#").addClass("no-file");
}
}
});
return result.prop("outerHTML");
}
}
DoS警告,这将为表中呈现的每个文件生成一个HTTP请求。如果是3或4,则您的Web服务器将能够处理它。但是,如果它是10、50、100、500、1000等,等等,则本质上将要对Web服务器执行拒绝服务攻击。大多数Web服务器配置为允许10个并发同时连接到服务器。您可以在配置中进行设置,但最终可能会耗尽资源。
服务器可能无法打开和关闭足够的套接字来处理所有请求,并将开始对它们进行排队。这将导致浏览器必须等待更长的时间才能执行脚本,并可能导致超时。根据列表大小,浏览器可能会开始消耗更多的内存资源,并且可能会锁定或崩溃。
同样,我会强烈建议服务器端脚本承担繁重的工作。如果该项目在服务器上不存在,则它不应该返回数据,或者应该返回Datatable可以使用的值,而不必执行很多潜在的威胁性工作。
这是从经验而不是理论出发的。
希望有帮助。