【发布时间】:2018-08-09 00:22:36
【问题描述】:
我有一个 .NET Core Web API,当我尝试向它发布一些包含一些 json 的数据时,它返回 415 Unsupported Media Error。以下是 Chrome 调试器中返回的部分内容:
Request URL:http://localhost:51608/api/trackAllInOne/set
Request Method:POST
Status Code:415 Unsupported Media Type
Accept:text/javascript, text/html, application/xml, text/xml, */*
Content-Type:application/x-www-form-urlencoded
action:finish
currentSco:CSharp-SSLA:__How_It_Works_SCO
data:{"status":"incomplete","score":""}
activityId:13
studentId:1
timestamp:1519864867900
我认为这与我的控制器不接受 application/x-www-form-urlencoded 数据有关 - 但我不确定。我试过用Consumes 装饰我的控制器,但这似乎不起作用。
[HttpPost]
[Route("api/trackAllInOne/set")]
[Consumes("application/x-www-form-urlencoded")]
public IActionResult Post([FromBody] PlayerPackage playerPackage)
{ etc..}
非常感谢任何帮助。
以下代码在 .NET 4.6.1 中运行良好,我能够捕获和处理上面显示的帖子。
[ResponseType(typeof(PlayerPackage))]
public async Task<IHttpActionResult> PostLearningRecord(PlayerPackage playerPackage)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var id = Convert.ToInt32(playerPackage.ActivityId);
var learningRecord = await _context.LearningRecords.FindAsync(id);
if (learningRecord == null)
return NotFound();
etc...
【问题讨论】:
-
什么是
PlayerPackage?您是如何从 Front 发送请求的? -
PlayerPackage 是从在线课程发送的信息,用于跟踪学生在该课程中的进度。我无法控制系统如何发布。我的 WebApi 的工作是捕获这些帖子并将它们保存在我的跟踪系统中。
-
你想用
data:{"status":"incomplete","score":""}接受数据还是想记录所有的bodyaction:finish currentSco:CSharp-SSLA:__How_It_Works_SCO data:{"status":"incomplete","score":""} activityId:13 studentId:1 timestamp:1519864867900 -
是的,我确实想接受 json 数据;{"status: "incomplete" 等。这是关键部分,也是阻止它工作的原因。当我删除 json 时,似乎工作正常 - 但 json 是我最需要的。
-
以下代码在 .net 4.6.1 中用于相同帖子的正常工作:
[ResponseType(typeof(PlayerPackage))] public async Task<IHttpActionResult> PostLearningRecord(PlayerPackage playerPackage) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var id = Convert.ToInt32(playerPackage.ActivityId); var learningRecord = await _context.LearningRecords.FindAsync(id); if (learningRecord == null) return NotFound();
标签: asp.net-core-2.0 asp.net-core-webapi