.net MVC问题 后台控制器需要接受一个List<class>型的参数,用json如何传过去?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net MVC问题 后台控制器需要接受一个List<class>型的参数,用json如何传过去?相关的知识,希望对你有一定的参考价值。

页面如何调用参数为List<class> 的控制器方法呢?用$.ajax 参数怎么传递?直接传json对象行吗?
问题已经解决,参数直接传json数组格式的字符串就行了,按如下方式配置,没有报错,且成功传递到后台。注意传递参数时用JSON.stringify(json对象)转一下,即
$.ajax(
data: JSON.stringify(json对象)) ,
contentType: "application/json; charset=utf-8",//这句很重要,
。。。。。。

参考技术A 要看你List使用的那class是什么类型,如果是int或string这种基础类型还好说,如果是自己定义的Model就难做了。 参考技术B //JS代码

 $("#upLoadFile").click(function () 
        $.ajax(
            type: 'post',
            url: '/Home/AboutJsonTest',

            data: 
                CalList: cal_Griddata
            ,
            success: function () 
                alert("success");
            
        );
    )

cal_Griddata是一个数组 。

控制器代码

 public ActionResult AboutJsonTest(List<Cal_Griddata> CalList)
        
            
            return View("Index");
        

asp.net Core MVC 2 - 配置 CORS 以接受 NULL 来源

【中文标题】asp.net Core MVC 2 - 配置 CORS 以接受 NULL 来源【英文标题】:asp.net Core MVC 2 - configure CORS to accept NULL origin 【发布时间】:2019-08-11 09:47:47 【问题描述】:

我需要配置一个使用 asp.net core 2.2 实现的 web api,以接受“空”源(“源”标头缺失或为空)。

在你从我的喉咙里跳出来之前:我知道有一个 null 起源是不好的。但不幸的是,我对此无能为力,因为调用是由传递空源的第三方服务器发出的,我无法控制它,所以我需要让我的 api 接受空源。

我试过这样做:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    app.UseHsts();
    app.UseMvc();
    app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());


...

public void ConfigureServices(IServiceCollection services)

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    //Configuring CORS
    services.AddCors();

但它没有任何区别。当我发出 POST 请求(使用 jQuery 的 ajax 方法)时,我收到以下错误:

我怀疑一个 null/missing origin 只是在检查之前就被丢弃了......我是对的吗?有什么方法可以接受 null 来源吗?

【问题讨论】:

实际发生了什么让您认为有问题?您没有提到任何实际的异常或失败。 @UncleDave:你说得对,我已经编辑了错误的问题 您的问题是指由第三方“服务器”进行的调用,而屏幕截图显然是 chrome 开发工具,这意味着您正在从浏览器发送请求。这是一个非常重要的区别,因为浏览器是由于 CORS 而阻止响应的东西,而不是服务器。因此,如果您要从另一台服务器而不是浏览器发出请求,那么 CORS 将不会进入等式。但是,如果您打算从尝试将app.UseCors 移动到app.UseMvc 上方的浏览器发送请求。 @UncleDave:我解决了这个问题(见我的回答)。但是要回答您的问题:是的,我正在使用我的浏览器,但我所在的页面位于我无法控制的服务器上。有问题的页面包含几个“插件样式”,并使用一些沙盒技巧来隔离这些部分(我认为它使用 iframe 来做到这一点)。结果是,如果您从这些“孤立”部分之一进行调用,则发出的来源为空,即使我在具有正确域名和所有内容的“真实”页面上。 好巧,我也解决了这个问题! (见我上面评论的结尾)。 【参考方案1】:

好的,我解决了。问题很简单:Startup 类中的UseCors()AddCors() 方法必须在UseMvc()AddMvc() 方法之前调用。

【讨论】:

【参考方案2】:

CORS 中间件必须放在 MVC 中间件之前,否则 MVC 中间件(和您的控制器)将发送响应而不允许 CORS 中间件有机会运行。

将您的配置方法更改为:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    app.UseHsts();
    app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
    app.UseMvc(); // Add this middleware last.

ConfigureServices 方法中AddMvcAddCors 的顺序无关紧要。

【讨论】:

以上是关于.net MVC问题 后台控制器需要接受一个List<class>型的参数,用json如何传过去?的主要内容,如果未能解决你的问题,请参考以下文章

如何接受数组作为 ASP.NET MVC 控制器操作参数?

如何制作可以接受来自外部站点的请求的 ASP.NET MVC 控制器?

Asp.Net MVC 的ContentResult 返回字符串,jquery.post的回调函数不接受,为啥?

asp.net Core MVC 2 - 配置 CORS 以接受 NULL 来源

在我的应用程序 asp.net mvc 的后台运行此控制器和 javascript 代码

ASP.Net MVC数据传递