MVC视图中的Web Api模型验证结果

时间:2015-03-29 11:39:25

标签: asp.net-mvc asp.net-web-api

拥有这样的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应用程序时,将错误返回到视图是没有问题的。

1 个答案:

答案 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