将 Null 作为参数传递给控制器 POST 方法
Passing Null as a Parameter to Controller POST Method
我犯了一个相当简单的错误。在 Fiddler 中,我创建了一个 POST。请注意,在 "FileFullpath" 中,我使用了一个反斜杠而不是两个。
我的 Web API 模型是这样定义的...
public class GTMetadataModel
{
public int Id { get; set; }
public string ComputerId { get; set; }
public string UserId { get; set; }
public string FileFullpath { get; set; }
public string Version { get; set; }
public string[] Categories { get; set; }
public double[] Scores { get; set; }
}
我的 Web API 控制器是这样定义的...
public HttpResponseMessage PostGTMetadata(GTMetadataModel newentry)
{
... // handle null parameter and return error here.
var response = Request.CreateResponse<GTMetadataModel>(HttpStatusCode.Created, newentry);
return response;
}
当我运行 Web API 并发送Fiddler POST 时,"newentry" 为空。花了一点时间我才意识到我需要两个反斜杠。我把它改成两个然后 "newentry" 是正确的。
所以,很明显问题是提供了错误的数据,但是我的服务器端代码在哪里以及如何能够检测到错误的 Json 数据?
更新:马克的回答被采纳。因为引用的 post 是稳健、优雅方法的一个很好的例子。但是,对于那些只想要简单答案的人来说,引用的 post 使用 "this.ModelState" 来识别解析数据的问题。我可以将以下代码添加到我的 Post 处理程序方法中(更有可能的是,我会从答案 Mark 引用中改编一些内容)。
if(ModelState.IsValid == false)
{
var errors = ModelState
.Where(s => s.Value.Errors.Count > 0)
.Select(s => s.Key + ": " + s.Value.Errors.Select(t=>t.Exception.Message).Aggregate((a,b) => a + "\n" + b))
.Aggregate((a, b) => a + "\n" + b);
Debug.Print(errors);
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errors);
}
您可以使用操作过滤器来拦截不良请求。
看问题,Validating parameters in ASP.NET Web API model binder
我犯了一个相当简单的错误。在 Fiddler 中,我创建了一个 POST。请注意,在 "FileFullpath" 中,我使用了一个反斜杠而不是两个。
我的 Web API 模型是这样定义的...
public class GTMetadataModel
{
public int Id { get; set; }
public string ComputerId { get; set; }
public string UserId { get; set; }
public string FileFullpath { get; set; }
public string Version { get; set; }
public string[] Categories { get; set; }
public double[] Scores { get; set; }
}
我的 Web API 控制器是这样定义的...
public HttpResponseMessage PostGTMetadata(GTMetadataModel newentry)
{
... // handle null parameter and return error here.
var response = Request.CreateResponse<GTMetadataModel>(HttpStatusCode.Created, newentry);
return response;
}
当我运行 Web API 并发送Fiddler POST 时,"newentry" 为空。花了一点时间我才意识到我需要两个反斜杠。我把它改成两个然后 "newentry" 是正确的。
所以,很明显问题是提供了错误的数据,但是我的服务器端代码在哪里以及如何能够检测到错误的 Json 数据?
更新:马克的回答被采纳。因为引用的 post 是稳健、优雅方法的一个很好的例子。但是,对于那些只想要简单答案的人来说,引用的 post 使用 "this.ModelState" 来识别解析数据的问题。我可以将以下代码添加到我的 Post 处理程序方法中(更有可能的是,我会从答案 Mark 引用中改编一些内容)。
if(ModelState.IsValid == false)
{
var errors = ModelState
.Where(s => s.Value.Errors.Count > 0)
.Select(s => s.Key + ": " + s.Value.Errors.Select(t=>t.Exception.Message).Aggregate((a,b) => a + "\n" + b))
.Aggregate((a, b) => a + "\n" + b);
Debug.Print(errors);
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errors);
}
您可以使用操作过滤器来拦截不良请求。
看问题,Validating parameters in ASP.NET Web API model binder