拥有这样的Web Api模型:
public class Meel
{
public int Id { get; set; }
[Required]
public string VaskNr { get; set; }
}
我的Post的API控制器是
public IHttpActionResult PostMeel(Meel meel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Meels.Add(meel);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = meel.Id }, meel);
}
我从这样的MVC客户端调用我的Web Api:
public ActionResult Create(MeelModel model)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:3806/");
var response = client.PostAsJsonAsync<MeelModel>("api/meels", model).Result;
return View(model);
}
我的问题是如何返回验证结果,即&#34;需要VaskNr&#34;到我的观点。我的视图由MVC模板生成。仅使用没有Web API的MVC应用程序时,将错误返回到视图是没有问题的。
答案 0 :(得分:0)
您可以创建一个将模型状态返回为json
的过滤器过滤器:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
为所有控制器设置过滤器:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ValidateModelAttribute());
// ...
}
}
为一个控制器设置过滤器:
[ValidateModel]
public HttpResponseMessage Post(Product product)
{
// ...
}
请参阅:http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api