ASP.NET Web API POST参数为null

 雯雯2046 发布于 2023-02-04 17:54

(为了澄清,我已经阅读了其他问题及其答案,并尝试了所有解决方案,但没有一个解决了这个问题)

我正在本地调试我将部署到Windows Azure云服务的代码.它是几天前正在运行的ASP.NET Web API应用程序,但现在不再使用了.

我有一个带有GET和POST处理程序的控制器.GET处理程序工作正常并返回所需的结果,但POST处理程序无法从POST正文请求中获取参数.这个处理程序在几个版本之前(大约2天前)工作得很好,但它现在不能正常工作.以下是详细信息:

首先,GET和POST处理程序:

public class PlayerController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Information(string userID)
    {
        // Works fine!
    }

    [HttpPost]
    public HttpResponseMessage Insert(PlayerEntry entry)
    {
        // All values from entry are null or 0!
    }
}

这是PlayerEntry模型:

public class PlayerEntry
{
    public string userID;
    public string userName;
    public int userProgress;
}

这是发出的POST请求(取自Fiddler):

POST http://127.0.0.1/api/player/insert HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 80
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

userID=20&userName=Test&userProgress=9

这是服务器中的调试输出:

iisexpress.exe Information: 0 : Request, Method=POST, Url=http://127.0.0.1:81/api/player/insert, Message='http://127.0.0.1:81/api/player/insert'
iisexpress.exe Information: 0 : Message='Player', Operation=DefaultHttpControllerSelector.SelectController
iisexpress.exe Information: 0 : Message='MvcWebRole1.Controllers.PlayerController', Operation=DefaultHttpControllerActivator.Create
iisexpress.exe Information: 0 : Message='MvcWebRole1.Controllers.PlayerController', Operation=HttpControllerDescriptor.CreateController
iisexpress.exe Information: 0 : Message='Selected action 'Insert(PlayerEntry entry)'', Operation=ApiControllerActionSelector.SelectAction
iisexpress.exe Information: 0 : Message='Value read='MvcWebRole1.Models.PlayerEntry'', Operation=JQueryMvcFormUrlEncodedFormatter.ReadFromStreamAsync
iisexpress.exe Information: 0 : Message='Parameter 'entry' bound to the value 'MvcWebRole1.Models.PlayerEntry'', Operation=FormatterParameterBinding.ExecuteBindingAsync
iisexpress.exe Information: 0 : Message='Model state is valid. Values: entry=MvcWebRole1.Models.PlayerEntry', Operation=HttpActionBinding.ExecuteBindingAsync
iisexpress.exe Information: 0 : Message='Action returned 'StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
  Content-Type: text/plain; charset=utf-8
}'', Operation=ReflectedHttpActionDescriptor.ExecuteAsync
iisexpress.exe Information: 0 : Operation=ApiControllerActionInvoker.InvokeActionAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=PlayerController.ExecuteAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Response, Status=200 (OK), Method=POST, Url=http://127.0.0.1:81/api/player/insert, Message='Content-type='text/plain; charset=utf-8', content-length=0'
iisexpress.exe Information: 0 : Operation=PlayerController.Dispose

到目前为止,这些是我尝试过的并没有改变任何东西的东西:

在POST正文的开头添加一个"="(只是为了确保它不起作用)

在函数中添加一个[FromBody]beforePlayerEntry entryInsert()

尝试测试我在其他控制器中的任何其他POST处理程序(它们都不起作用!)

但是,当我只是删除PlayerEntry模型并从URL获取POST参数(并通过URL发送参数.我只是作为测试)时,我可以毫无问题地获得所有参数.

什么可能导致这个问题?据我记得,我没有更改处理程序中的任何代码(只有内部运行并连接到SQL Server并返回结果的代码),突然间我遇到了这个问题.

1 个回答
  • 我相信默认模型绑定器不绑定到字段,只绑定带有公共设置器的属性.尝试将字段更改为属性:

    public class PlayerEntry
    {
        public string userID { get; set; }
        public string userName { get; set; }
        public int userProgress { get; set; }
    }
    

    2023-02-04 17:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有