ASP.Net Core 3 和简单的 POST 控制器
ASP.Net Core 3 and simple POST the controller
我正在尝试 POST 到 ASP.NET 核心 3 服务器。
然而我的 number
总是 0
。
ASP.Net Core 3 有什么我看不懂的技巧吗?
参数[FromBody]
没有解决问题。 类 作为参数没有帮助,值不会改变。
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add(int number)
{
// number is always 0 :( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
number += 1;
var d = new Dictionary<string, object>
{
["message"] = "Hello",
["number"] = number
};
return Ok(d);
}
let input = { number: 5825 }
$.ajax(
{
url: `/api/add`,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(input),
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
我的服务是
services.AddSession();
services.AddHttpContextAccessor();
services.AddControllersWithViews();
我用
app.UseSession();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Default}/{action=Index}/{id?}"); });
根据显示的客户端代码,该客户端正在发布复杂类型以绑定到服务器上的简单类型。
创建模型
public class Data {
public int number { get; set; }
}
将模型绑定到动作
[HttpPost]
[Route("/api/add")]
public IActionResult Add([FromBody]Data model) {
if(ModelState.IsValid) {
var number = model.number;
number += 1;
var d = new {
message = "Hello",
number = number
};
return Ok(d);
}
return BadRequest(ModelState);
}
在您的 javascript 中,不要发布对象输入,而是尝试直接发布数字变量:
let number=5825;
$.ajax(
{
url: `/api/add`,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
data: number,
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
在你的控制器中使用 [FromBody] 注释:
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add([FromBody]int number)
{
// number is always 0 :( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
number += 1;
var d = new Dictionary<string, object>
{
["message"] = "Hello",
["number"] = number
};
return Ok(d);
}
我同意问题在于您尝试发送复杂类型,而您的操作仅接受简单类型 int。如果您还有问题,请告诉我。
如果您不想创建模型,可以按照@Nkosi 的解决方案将 属性 添加到 model.Or,只需将数字添加到 url 查询,如下所示:
let number = 5825;
$.ajax(
{
url: '/api/add?number=' + number,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add(int number)
{
//...
}
我正在尝试 POST 到 ASP.NET 核心 3 服务器。
然而我的 number
总是 0
。
ASP.Net Core 3 有什么我看不懂的技巧吗?
参数[FromBody]
没有解决问题。 类 作为参数没有帮助,值不会改变。
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add(int number)
{
// number is always 0 :( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
number += 1;
var d = new Dictionary<string, object>
{
["message"] = "Hello",
["number"] = number
};
return Ok(d);
}
let input = { number: 5825 }
$.ajax(
{
url: `/api/add`,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(input),
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
我的服务是
services.AddSession();
services.AddHttpContextAccessor();
services.AddControllersWithViews();
我用
app.UseSession();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Default}/{action=Index}/{id?}"); });
根据显示的客户端代码,该客户端正在发布复杂类型以绑定到服务器上的简单类型。
创建模型
public class Data {
public int number { get; set; }
}
将模型绑定到动作
[HttpPost]
[Route("/api/add")]
public IActionResult Add([FromBody]Data model) {
if(ModelState.IsValid) {
var number = model.number;
number += 1;
var d = new {
message = "Hello",
number = number
};
return Ok(d);
}
return BadRequest(ModelState);
}
在您的 javascript 中,不要发布对象输入,而是尝试直接发布数字变量:
let number=5825;
$.ajax(
{
url: `/api/add`,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
data: number,
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
在你的控制器中使用 [FromBody] 注释:
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add([FromBody]int number)
{
// number is always 0 :( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
number += 1;
var d = new Dictionary<string, object>
{
["message"] = "Hello",
["number"] = number
};
return Ok(d);
}
我同意问题在于您尝试发送复杂类型,而您的操作仅接受简单类型 int。如果您还有问题,请告诉我。
如果您不想创建模型,可以按照@Nkosi 的解决方案将 属性 添加到 model.Or,只需将数字添加到 url 查询,如下所示:
let number = 5825;
$.ajax(
{
url: '/api/add?number=' + number,
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
accepts: "application/json",
complete: function (output) {
// completed
}
}
);
[HttpPost]
[Route("/api/add")]
public ActionResult<Dictionary<string, object>> Add(int number)
{
//...
}