InvalidOperationException: неверный тип содержимого: Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm () - PullRequest
0 голосов
/ 03 января 2019

Я новичок в 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'

Я не могу найти никаких примеров того, как это сделать, и любая помощь будет оценена

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...