1

I have created a web api and it was working successfully before. However, something has changed (not sure what) and it is now no longer working.

I used fiddler to compose a PUT to /api/Dealer/19 with the following JSON Data:

{"notes":[],"dealerId":19,"name":"4th Street Auto Co.","phone":"888-776-5085","website":"http://www.cars.com/dealers/98681/4th-street-auto-co/","streetAddress":"5109 Preston Highway","city":"Louisville","state":"KY","zipCode":40213}

I get a 400 error response:

HTTP/1.1 400 Bad Request Server: ASP.NET Development Server/11.0.0.0 Date: Tue, 31 Dec 2013 00:07:12 GMT X-AspNet-Version: 4.0.30319 Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: application/json; charset=utf-8 Content-Length: 123 Connection: Close

{"Dealer.Name":"Please Enter Name","Dealer.Phone":"Please Enter Phone Number","Dealer.Website":"Please Enter Website"}

I have a ValidationActionFilter which is building the error message:

public class ValidationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext context)
    {
        var modelState = context.ModelState;
        if (!modelState.IsValid)
        {
            var errors = new JObject();
            foreach (var key in modelState.Keys)
            {
                var state = modelState[key];
                if (state.Errors.Any())
                {
                    errors[key] = state.Errors.First().ErrorMessage;
                }
            }

            context.Response = context.Request.
                CreateResponse<JObject>(HttpStatusCode.BadRequest, errors);
        }
    }
}

My Model looks like this:

public class Dealer
{
    public int DealerId { get; set; }

    [Required(ErrorMessage = "Please Enter Name")]
    [StringLength(100, ErrorMessage = "Name is too long")]
    public string Name { get; set; }

    [Required(ErrorMessage="Please Enter Phone Number")]
    [StringLength(14, ErrorMessage = "Phone is too long")]
    public string Phone { get; set; }

    [Required(ErrorMessage = "Please Enter Website")]
    [StringLength(250, ErrorMessage = "Website is too long")]
    public string Website { get; set; }

    [StringLength(100, ErrorMessage = "Street Address is too long")]
    public string StreetAddress { get; set; }

    [StringLength(50, ErrorMessage = "City is too long")]
    public string City { get; set; }

    [StringLength(50, ErrorMessage = "State is too long")]
    public string State { get; set; }

    public int ZipCode { get; set; }

    public virtual ICollection<Note> Notes { get; set; }
}

What is causing the validation errors even though the fields are there?

Thanks!

1
  • Can you show the controller action method? It may be missing the [FromBody] attribute. Commented Feb 27, 2014 at 2:47

1 Answer 1

1

I guess the MVC cannot bind the data to your model and therefore the model is null?

If this is the case, try to reformat the data you post to reflect the model

{"Dealer.Name":"..","Dealer.Phone":"..."...

Instead of {"name":...,"phone":...}

Sign up to request clarification or add additional context in comments.

2 Comments

I switched it and it still didn't work. Same error still. The JSON that I am posting to fiddler is the exact same json as it is serialized from Newtonsoft JSonSerializer in the MVC Controller to the view.
I'd have suggested the same as the 400 response you show mentions that fields by these names are missing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.