我使用带有MVC模式的ASP. Net Core 3.1创建了一个全新的Visual Studio 2019 Web应用程序。
我的控制器有一个 HttpPost 方法,该方法应该有一个传入的 Json 对象(我使用 [FromBody] 作为传入参数)。
无论我尝试什么,传入的参数始终为 Null。我尝试将参数更改为字符串,并将模型修改为简单的 3 字段类,但它仍然显示为 null。
我使用Chrome的开发者工具来确保我的页面从JavaScript Post回调正确发送了Json对象(也使用Postman进行了同样的操作),结果相同:我的参数仍然为Null。
我需要做什么才能将参数作为实际值输入?
我的控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using canvasApiLib.API;
using CanvasGrades.Models.AuxiliaryModels;
namespace CanvasGrades.Controllers
{
public class FinalGradeController : Controller
{
public async Task<IActionResult> Index()
{
// Course Name
dynamic courseDetails = await clsCoursesApi.getCourseDetails(accessToken, apiUrl, canvasCourseId);
ViewData["CourseName"] = courseDetails.name;
// Course Term
dynamic courseTerm = await clsEnrollmentTermsApi.getEnrollmentTerm(accessToken, apiUrl, canvasAccountID, termNum);
ViewData["CourseTerm"] = courseTerm.name;
return View();
}
[HttpPost]
public async Task<IActionResult> LoadTable([FromBody]DTParameters dtParameters)
{
//DTParameters dtParameters = new DTParameters();
if (dtParameters == null)
{
dtParameters = new DTParameters();
}
}
}
}
我的DTParameters模型:
public class DTParameters
{
public int Draw { get; set; }
public DTColumn[] Columns { get; set; }
public DTOrder[] Order { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public DTSearch Search { get; set; }
public IEnumerable<string> AdditionalValues { get; set; }
}
我看到的大多数例子都提到要调整应用程序。在Startup.cs文件的Configure调用中使用MVC实例化,但是我的没有:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
(已添加)
{"draw":1,"columns":[{"data":"studentName","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":"studentEMail","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":null,"name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":"finalGrade","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":"lastAttendDate","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":null,"name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":null,"name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":"bannerID","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}},{"data":"crn","name":"","searchable":true,"orderable":true,"search":{"value":"","regex":false}}],"order":[{"column":0,"dir":"asc"}],"start":0,"length":10,"search":{"value":"","regex":false}}
我再次重试了我的简单参数,注意到我发送的原始ID字段是一个整数,但当我将其设为字符串时(如模型所述),它没有问题。
public class SimpleParam
{
public string Id { get; set; }
public string Name { get; set; }
public string Foo { get; set; }
}
{"id": "1", "name": "fred", "foo": "bob"}
因此,这意味着我必须找出我的DTParameters模型的问题所在。
错误是“dir”:“asc”。您需要将其更改为int(“dir”: 0),或者用
[JsonConverter(typeof(JsonStringEnumConverter))]
或者把它放在启动中.cs
public void ConfigureServices(IServiceCollection services)
{
services
.AddControllers()
.AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())
);
//...
}
您的输入被美化了:
{
"draw": 1,
"columns": [
{
"data": "studentName",
"name": "",
"searchable": true,
"orderable": true,
"search": {
"value": "",
"regex": false
}
}
],
"order": [
{
"column": 0,
"dir": "asc"
}
],
"start": 0,
"length": 10,
"search": {
"value": "",
"regex": false
}
}
您的带有正确修饰的数据表类(参见上面的DTOrderDir):
public class DTParameters
{
public int Draw { get; set; }
public DTColumn[] Columns { get; set; }
public DTOrder[] Order { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public DTSearch Search { get; set; }
public IEnumerable<string> AdditionalValues { get; set; }
}
public class DTColumn
{
public string Data { get; set; }
public string Name { get; set; }
public bool Searchable { get; set; }
public bool Orderable { get; set; }
public DTSearch Search { get; set; }
}
public class DTOrder
{
public int Column { get; set; }
public DTOrderDir Dir { get; set; }
}
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum DTOrderDir
{
ASC,
DESC
}
public class DTSearch
{
public string Value { get; set; }
public bool Regex { get; set; }
}
阅读此处了解更多信息:JavaScriptSerializer - 将枚举序列化为字符串的 JSON 序列化
问题内容: 我将尝试使用JavaFX 2,并使用一个简单的演示应用程序。该项目包括3个文件,即Main.java,Controller.java和sample.fxml。 在Sample.fxml中,我声明了控制器: 在我的Main.java中,我尝试访问控制器 所以我的第一个想法是映射不起作用。因此,我在控制器中添加了一个initialize方法。 现在的输出是: 在里面 空值 所以我现在的问题
我试图通过web api microsoft应用程序中的post请求传递对象的参数,但传递的参数始终为null。 这是我的控制器的post方法,在调试下程序达到了方法但是dataUrlIN。url字符串始终为空 这是DataUrl的对象 这是post请求的最新版本 在发送post请求后,方法公共无效Post(Data Url dataUrlIN)中的断点被触发,但url字符串为空HelloWorl
问题内容: 这里已经有一些类似的帖子,并且尝试了所有建议的解决方案,但仍然无法正常工作……我无法在控制器内部获取值,它始终为null。下面是代码。我想念什么吗? 客户端javascript MVC控制器 模型 问题答案: 谢谢你们的指导和解决方案。解决方案是您所有建议的组合,因此我决定将其汇总在一篇文章中。 解决问题的方法如下: 应该是(如上面的Ant P建议) json数据应采用(如上面的Ant
我开始使用MVC4 Web API项目,我有多个< code>HttpPost方法的控制器。控制器如下所示: 控制器 这里代表负责处理通过请求的Json的模板类。 错误: 当我使用Fiddler请求或时,我得到一个错误: 找到与请求匹配的多个操作 如果我去掉上面的一个方法,效果会很好。 全球 我已尝试修改
我是新来的百里香,我有以下问题。我想在html模板内调用一个java方法,但该方法需要一个参数,但问题是,无论我为参数传递什么,结果总是空的。 类别。html: 分类控制器: