我已经将我的应用程序从ASP.Net MVC 5 web应用程序转换为ASP.Net Core 6。在MVC 5中,我成功地实现了DataTables服务器端处理。然而,在ASP.Net核心中,我一直得到
错误404 (未找到)。
预览浏览器的网络会话中的错误,我得到
HTTP 404.15 -未找到请求过滤模块配置为拒绝查询字符串过长的请求。
下面是我的网格视图
@model _AuditDTGridViewModel
<table class="table table-striped table-bordered table-hover" cellspacing="0" id="datatab">
<thead id="sortableHeader" class="bg-grey">
<tr id="columnFilterRow" class="filter" style="">
@foreach (var c in Model.ColumnOptions)
{
<td>
@if (c.ShowColumnSearchField)
{
if (c.ColumnSearchFieldType.ToLower() == "text")
{
<input id="filtercolumn_@c.ColumnName" class="input-xsmall" type="text" style="width: 100% !important" />
}
}
else if (c.DisplayName == "Actions")
{
@*<button id="filterColumnSearchBtn" class="btn btn-xs btn-outline green" title="Search Columns" style="border-width: 1px!important; margin-bottom: 2px"><i class="fa fa-search"></i>Search</button>*@
<button id="clearfilterColumnSearchBtn" class="btn btn-xs btn-outline red" title="Reset Filter" style="border-width: 1px!important"><i class="fa fa-times"></i>Clear Filter</button>
}
</td>
}
</tr>
<tr id="sortableHeading" class="heading">
@foreach (var c in Model.ColumnOptions)
{
<th>
@Html.Raw(c.DisplayName)
</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
<script src="~/js/jquery.min.js"></script>
<script src="~/js/jquery.dataTables.min.js"></script>
<script src="~/js/dataTables.bootstrap.js"></script>
<script type="text/javascript">
var oTable = $('#datatab').DataTable({
"serverSide": true,
"ajax": {
"type": "POST",
"url": '@Url.Action("AjaxListOfAudits", "Client", Model)',
"contentType": 'application/json; charset=utf-8',
'data': function (data) {
return data = JSON.stringify(data);
}
},
"pagingType": "full_numbers",
"processing": true,
"paging": true,
"deferRender": true,
"columns": @Html.Raw(Model.data),
"order": [1, "asc"]
});
</script>在我的控制器中,我调用下面的操作
public JsonResult AjaxListOfAudits(_AuditDTGridViewModel _AuditDTGridViewModel, DTParameters param)
{
// Some codes go here
}这是我的_AuditDTGridViewModel
public class _AuditDTGridViewModel : BaseSearchFilterViewModel
{
public _AuditDTGridViewModel()
: base()
{
AllAuditsOrMyAudits = 1;
}
public Dictionary<string, string> AuditType { get; set; }
public int? MembershipId { get; set; }
public int AllAuditsOrMyAudits { get; set; }
public int? AuditAction { get; set; }
public int? AuditCategory { get; set; }
public string data { get; set; }
public List<DTColumnOptions> ColumnOptions { get; set; }
}当我尝试调试时,该操作不会被击中。如果我从Url操作中删除模型,我就会得到
错误400 -不良请求
如果在
提前谢谢你。
发布于 2019-12-30 06:22:49
HTTP 404.15 -未找到请求过滤模块配置为拒绝查询字符串过长的请求。
在您的代码中,我们可以发现您正在使用下面的代码片段传递您的Model对象来生成URL。如果超过长度限制,则会导致上述错误。
"url": '@Url.Action("AjaxListOfAudits", "Client", Model)'如果您想将_AuditDTGridViewModel和服务器端处理参数传递给您的操作,请参考下面的示例代码从请求体传递它们。
论JS客户端
var oTable = $('#datatab').DataTable({
"serverSide": true,
"ajax": {
"type": "POST",
"url": '@Url.Action("AjaxListOfAudits", "Client")',
"contentType": 'application/json; charset=utf-8',
data: function (d) {
//console.log(@Json.Serialize(Model));
var _auditDTGridViewModel = @Json.Serialize(Model);
var ajaxAuditsModel = {
"_AuditDTGridViewModel": _auditDTGridViewModel, "DTParameters": d
};
//console.log(ajaxAuditsModel);
return JSON.stringify(ajaxAuditsModel);
}
},
// other options
});在控制器动作中
public JsonResult AjaxListOfAudits([FromBody] AjaxAuditsModel ajaxAuditsModel)
{
// Some codes go here
}AjaxAuditsModel类
public class AjaxAuditsModel
{
public _AuditDTGridViewModel _AuditDTGridViewModel { get; set; }
public DTParameters DTParameters { get; set; }
}测试结果

https://stackoverflow.com/questions/59504786
复制相似问题