DBにユーザーを追加するコントローラーとメソッドがあります。
私は次のようにリクエストヘッダーを使用してFiddlerから呼び出します-
コンテンツタイプ:application / xml
受け入れる:application / xml
ホスト:localhost: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が得られます。