asp.net-web-api – 为什么我的ApiController方法的ModelState.I
我有一个ApiController方法接受几个参数,像这样:
// POST api/files public HttpResponseMessage UploadFile ( FileDto fileDto,int? existingFileId,bool linkFromExistingFile,Guid? previousTrackingId ) { if (!ModelState.IsValid) return Request.CreateResponse(HttpStatusCode.BadRequest); ... } 当我POST到这个我把FileDto对象放在请求的正文中,并且查询字符串上的其他参数. 我已经发现我不能简单地省略可空参数 – 我需要把它们放在一个空值的查询字符串上.所以,当我不想为可空参数指定一个值时,我的查询看起来像这样: http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId= 这与我的控制器方法相符,当执行该方法时,可空参数确实为空(如您所料). 但是,对ModelState.IsValid的调用返回false,当我检查错误时,它会抱怨两个可空参数. (模型的其他位没有错误).消息是:
为什么它认为需要/不存在价值?当然(a)一个值可以是空的,并且(b)一个值是(排序的)存在的 – 一个空的方式? 解决方法
除了第一个答案之外,如果将所有可选项移动到方法声明的末尾,您应该能够使您的代码工作,允许省略前缀的url,并且我总是将其设置为NULL以获得良好的度量值:
FileDto fileDto,Guid? previousTrackingId = null,int? existingFileId = null 但 好点re:一个带有前缀的空URL值…与NULL一样…考虑字符串,是?q =空字符串或空? 我试图找到框架中的确切逻辑(并继续看)引发了这些错误,但是在我的实验过程中,我发现直接在URL参数上指定了一个binder,似乎绕过了逻辑,并允许一个前缀后的空值没有模型绑定错误. 像这样: public class ValuesController : ApiController { // GET api/values public IEnumerable<string> Get( [FromUri(BinderType = typeof(TypeConverterModelBinder))] string q = null,[FromUri(BinderType = typeof(TypeConverterModelBinder))] int? value = null) { if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } return new string[] { value.HasValue ? value.Value.ToString() : "",q }; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Response.IsClientConnected如何在幕后工作?
- ASP.NET Core部署在IIS中后,报无法打开登录所请求的数据库
- asp-classic – 对经典asp中的asp页面进行更改是否需要iisr
- asp.net-mvc – 流文本输出长时间运行的动作?
- asp.net-mvc-3 – 从ASP MVC 3 Preview更新到Beta后,提交了
- 开源音乐下载神器XMusicDownloader更新,支持歌单一键下载,
- asp.net – Excel VBA查询外部.aspx页面并检索数据
- asp.net-mvc-3 – 如何在MVC3上使用authorize属性
- asp.net – 如何在设计模式下打开RDLC
- asp.net-mvc – Knockout JS发送到MVC 3
- 将经典ASP应用程序迁移到ASP.NET
- asp.net – 在不过度使用meta:resourcekey的情况
- 发布一款层次下拉列表控件
- asp.net-mvc – 我想使用web.config中的规则在lo
- asp.net – 脚本标记和“<%...%>”标记之间有什
- Windbg程序调试系列2-内存泄露问题
- asp.net-web-api-405使用AttributeRouting.PUTAt
- asp.net-core-2.0 – 如何从Core 2 RazorPage Vi
- asp.net-mvc – 为什么Request.IsAuthenticated是
- asp.net-mvc – 使用KendoUI Grid的KendoUI编辑器