【发布时间】:2013-01-14 18:19:21
【问题描述】:
我有一个将用户添加到数据库的控制器和方法。
我从 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。
【问题讨论】:
标签: c# xml json post asp.net-web-api