首页 > 解决方案 > 不支持“Microsoft.AspNetCore.Http.IFormFile.Headers”上的集合类型“Microsoft.AspNetCore.Http.IHeaderDictionary”

问题描述

我试图使用 Ajax 将一个类的列表返回到我的视图中,这是我的 ajax

   $(document).ready(function () {

        debugger;

        $.ajax({
            url: '/Product/GetCard/',
            type: 'GET',
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            
            
            success: function (result) {
                debugger;

                var price = 0;
                var cnt = $(result).length;
                for (var i = 0; i < cnt; i++) {

                    debugger;
                    var newItem = '<div class="mini-cart-product-box pad-top20">' +
                        '<div class="cart-img-box">' +
                        ' <figure>' +
                        ' <img src="/Product/BlogImage/' + result[i].prdId + '"' + ' alt="">' +
                        '</figure>' +
                        '</div>' +
                        '<div class="cart-price-box">' +
                        '<h5><a href="product-detail.html">' + result[i].name + '</a></h5>' +
                        '<p>' +
                        result[i].count + 'x' + result[i].price + '</p>' +
                        '</div>' +
                        '<div class="cancle-box">' +
                        ' <a href="/Product/RemoveFromCart/' + result[i].id + '">x</a>' +
                        '</div>' +
                        '</div >';

                    $('#ccard').prepend(newItem);

                    $('#meme').html(' <span class="flaticon-cart"></span>' +
                        '<span class= "count">' + cnt + '</span>');
                    price = price + result[i].price;

                }

                $('#pri').html('<span class="furgan-Price-currencySymbol">ریال</span>' + price);

            },
           
            error: function (err) {
                console.log(err)
                alert(err)
            },
           
        });





    })

这称为

   [AllowAnonymous]
    [HttpGet]
    public JsonResult GetCard(string Idis)
    {
        var CardIdis = Request.HttpContext.Request.Cookies["UserCard"];

        if (CardIdis != null)
        {
            var Pros = _ProductConnections.GetProducts(CardIdis);
           
            return Json(Pros);
        }

        return Json(new List<ProductVm>());

    }

一切正常,它会返回,但最后没有调用成功函数,错误消息是

An unhandled exception occurred while processing the request.
NotSupportedException: The collection type 'Microsoft.AspNetCore.Http.IHeaderDictionary' on 'Microsoft.AspNetCore.Http.IFormFile.Headers' is not supported.
System.Text.Json.JsonClassInfo.GetElementType(Type propertyType, Type parentType, MemberInfo memberInfo, JsonSerializerOptions options)

Stack Query Cookies Headers Routing
NotSupportedException: The collection type 'Microsoft.AspNetCore.Http.IHeaderDictionary' on 'Microsoft.AspNetCore.Http.IFormFile.Headers' is not supported.
System.Text.Json.JsonClassInfo.GetElementType(Type propertyType, Type parentType, MemberInfo memberInfo, JsonSerializerOptions options)
System.Text.Json.JsonClassInfo.CreateProperty(Type declaredPropertyType, Type runtimePropertyType, Type implementedPropertyType, PropertyInfo propertyInfo, Type parentClassType, JsonConverter converter, JsonSerializerOptions options)
System.Text.Json.JsonClassInfo.AddProperty(Type propertyType, PropertyInfo propertyInfo, Type classType, JsonSerializerOptions options)
System.Text.Json.JsonClassInfo..ctor(Type type, JsonSerializerOptions options)
System.Text.Json.JsonSerializerOptions.GetOrAddClass(Type classType)
System.Text.Json.JsonPropertyInfo.get_ElementClassInfo()
System.Text.Json.JsonSerializer.HandleObject(JsonPropertyInfo jsonPropertyInfo, JsonSerializerOptions options, Utf8JsonWriter writer, ref WriteStack state)
System.Text.Json.JsonSerializer.WriteObject(JsonSerializerOptions options, Utf8JsonWriter writer, ref WriteStack state)
System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, int originalWriterDepth, int flushThreshold, JsonSerializerOptions options, ref WriteStack state)
System.Text.Json.JsonSerializer.WriteAsyncCore(Stream utf8Json, object value, Type inputType, JsonSerializerOptions options, CancellationToken cancellationToken)
Microsoft.AspNetCore.Mvc.Infrastructure.SystemTextJsonResultExecutor.ExecuteAsync(ActionContext context, JsonResult result)
Microsoft.AspNetCore.Mvc.Infrastructure.SystemTextJsonResultExecutor.ExecuteAsync(ActionContext context, JsonResult result)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0<TFilter, TFilterAsync>(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext<TFilter, TFilterAsync>(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我没有这个问题,它从今天开始,顺便说一句,我使用 cookie 来保存我想要返回的产品 idis

标签: c#ajaxasp.net-core

解决方案


NotSupportedException:不支持“Microsoft.AspNetCore.Http.IFormFile.Headers”上的集合类型“Microsoft.AspNetCore.Http.IHeaderDictionary”。

根据异常消息和您共享的代码,代码似乎使用 进行 JSON 序列化IFormFile,这导致了问题。请检查您的产品视图模型类是否包含IFormFile类型属性。

此外,如果您想返回带有产品信息的 Json 结果,您可以包含产品的图像 URL 或 base64 编码的图像,而不是 FormFile。


推荐阅读