我有一个将用户添加到数据库的控制器和方法。
我从 Fiddler 调用它并带有请求标头,如下所示 -
内容类型:应用程序/xml
接受:应用程序/xml
主机:本地主机:62236
内容长度:39
还有一个请求体——
<User>
<Firstname>John</Firstname>
<Lastname>Doe</Lastname>
</User>
这按预期工作,调用方法,在方法 PostUser 中处理用户对象。
public class UserController : ApiController
{
public HttpResponseMessage PostUser(User user)
{
// Add user to DB
var response = new HttpResponseMessage(HttpStatusCode.Created);
var relativePath = "/api/user/" + user.UserID;
response.Headers.Location = new Uri(Request.RequestUri, relativePath);
return response;
}
}
我正在自己的班级中执行我的模型验证
public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
// Return the validation errors in the response body.
var errors = new Dictionary<string, IEnumerable<string>>();
foreach (KeyValuePair<string, ModelState> keyValue in actionContext.ModelState)
{
errors[keyValue.Key] = keyValue.Value.Errors.Select(e => e.ErrorMessage);
}
actionContext.Response =
actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
}
}
}
但是如果我发布以下内容
<User>
<Firstname></Firstname> **//MISSING FIRST NAME**
<Lastname>Doe</Lastname>
</User>
模型无效,即使我声明 Accept: application/xml,也会返回 JSON 响应。
如果我在 UserController 中执行模型验证,我会得到一个正确的 XML 响应,但是当我在 ModelValidationFilterAttribute 中执行它时,我会得到 JSON。