Я новичок в Asp.net MVC Core.Я работаю над серверной загрузкой JQuery Datatables.net, используя Asp.Net Core MVC Middleware.
Я использовал это руководство, чтобы узнать, как создать обработчик, а затем Эта статья , чтобы перейти на промежуточное ПО, но столкнулась с некоторыми проблемами, с которыми, я надеюсь, вы сможете мне помочь.
Я уточнил, используя этот учебник
Я получаюошибка
"InvalidOperationException: неверный тип содержимого: Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm ()"
при запуске решения.
Вот мой код: Вид
<script type="text/javascript">
$(document).ready(function () {
$('#datatable').DataTable({
//"paging": true,
//"ordering": true,
//"info": true,
'columns' : [
{ 'data': 'InsertedDateUtc' },
//{ 'data': 'EventId' },
{ 'data': 'UserId' },
{ 'data': 'Action' },
{ 'data': 'Context' },
{ 'data': 'RecordId' },
{ 'data': 'Property' },
{ 'data': 'OldValue' },
{ 'data': 'NewValue' },
],
'processing': true,
'serverSide': true,
'ajax' : {
'type' : 'POST',
'url' : '../AuditEventData.cs',
//'url': '../APIController/GetAuditEvents'
//'url' : '@Url.Action("GetAuditEvents", "APIController")'
'datatype': 'json',
}
});
});
</script>
Промежуточное программное обеспечение
public class AuditEventData
{
private readonly RequestDelegate _next;
private readonly IDataGet _dataGet;
public AuditEventData(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext)
{
string result = null;
int filteredCount = 0;
var draw = httpContext.Request.Form["draw"].FirstOrDefault();
var start = int.Parse(httpContext.Request.Form["start"].FirstOrDefault());
var length = int.Parse(httpContext.Request.Form["length"].FirstOrDefault());
var sortCol = int.Parse(httpContext.Request.Form["columns[" + httpContext.Request.Form["order[0][column]"].FirstOrDefault() + "][name]"].FirstOrDefault());
var sortDir = httpContext.Request.Form["order[0][dir]"].FirstOrDefault();
var search = httpContext.Request.Form["search[value]"].FirstOrDefault();
try
{
var auditEvents = await _dataGet.GetServerSideAuditEvents(length, start, sortCol, sortDir, search);
filteredCount = auditEvents.Count();
var data = new
{
iTotalRecords = await _dataGet.GetTotalAuditEventCount(),
iTotalDisplayRecords = filteredCount,
aaData = auditEvents
};
result = JsonConvert.SerializeObject(data);
await httpContext.Response.WriteAsync(result);
}
catch (Exception e)
{
await ErrorHandler.HandleException(e);
}
await _next(httpContext);
}
}
// Extension method used to add the middleware to the HTTP request pipeline.
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseAuditEventDataMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<AuditEventData>();
}
}
Startup.cs
app.MapWhen(
context => context.Request.Path.ToString().EndsWith("ViewAudit"),
appBranch =>
{
appBranch.UseAuditEventDataMiddleware();
});
В классе промежуточного программного обеспечения строка
var start = int.Parse (httpContext.Request.Form ["start"]. FirstOrDefault ());
выдает мне ошибку - учебные пособия и документация Microsoft здесь , кажется, указывают на то, что мне не нужно использовать ".Form" и я должен иметь возможность просто использовать
var start = int.Parse (httpContext.Request ["start"]. FirstOrDefault ());
однако, когда я это делаю, я получаю эту ошибку
не может применить индексирование с [] к выражению типа 'HttpRequest'
Я не могу найти никаких примеров того, как это сделать, и любая помощь будет оценена
Спасибо