问题描述
.NET Core 3.1中的实验
我显然在Core中缺少HttpPost的KEY元素。我想将JSON传递给控制器,并从后面的代码中获取JSON所需的内容。运行此命令总是会提供400(错误请求),而永远不会使其成为函数,因此我被认为是基本的事情。我还尝试过使用jQuery POST方法$.post("/nodes",item,function () { alert("success");})
,该方法返回415(不受支持的媒体类型)。
我尝试了来自body,fromheader,from request的几个动作参数。 FromBody似乎应该是一个。我添加了基于其他帖子的CORS只是为了消除。如果需要的话,纯html文件就是项目中的文件,而不是cshtml。除jQuery外,没有其他客户端框架。我不想特定于框架的答案(角度,moo,vue,react等)。看来,如果做得正确,我们应该能够在最基本的层面上做到这一点。使用香草javascript或jQuery的答案可以很好地帮助我。
前进:GET全部起作用。
// Client side JavaScript.
var item = {
id: "9f14a706-e750-4b76-8ba5-78d890bbdf0d"
};
$.ajax({
type: "POST",accepts: "application/json",url: '/nodes',contentType: "application/json",data: JSON.stringify(item),error: function (jqXHR,textStatus,errorThrown) {
console.error("Something went wrong!");
console.error(textStatus);
console.error(errorThrown);
},success: function (result) {
console.log('Testing');
}
});
/// NodesController.cs
namespace INM.Controllers
{
[Route("[controller]")]
[ApiController]
public class NodesController : ControllerBase
{
[HttpPost]
public void Post([FromBody] string value)
{
var foo = "bar";
}
[HttpPut("{id}")]
public void Put(int id,[FromBody] string value)
{
var foo = "bar";
}
}
}
///StartUp.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddCors();
services.AddControllers();
}
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions
{
SourceCodeLineCount = 10
};
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:61246/")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin();
//.AllowCredentials()
});
app.UseDeveloperExceptionPage(developerExceptionPageOptions);
}
FileServerOptions fileServerOptions = new FileServerOptions();
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Clear();
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Add("INM.html");
app.UseFileServer(fileServerOptions); // combines app.UseDefaultFiles(); & app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run(async (context) =>
{
//throw new Exception("Some proc err");
await context.Response.WriteAsync("Hello World from Startup.cs (Configure) ");
});
}
更新 对于潜伏者:更改控制器中的签名可以解决我的问题。我知道这是基本的疏忽。
[HttpPost]
public object Post([FromBody] object value)
{
var foo = "bar";
return value;
}
此外,在撰写本文时,我误以为$ .ajax调用中的 dataType 属性。这指的是返回值与请求中发送的数据有效负载之间的关系。
希望这对您也有帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)