404不是由ajax后调用引起的

时间:2014-01-07 18:55:05

标签: c# javascript jquery asp.net-web-api asp.net-web-api-routing

我正在尝试将一些数据发布到web api控制器,但我似乎回到了404 NOT Found响应,这是我的代码:

 public class CarsController : ApiController
{
  .....

    [HttpPost]
    public CarInputCharacteristicsDTO PostCharacteristics(CarInputCharacteristicsDTO characteristics)
    {
        return characteristics;
    } 
}

public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Formatters.Clear();
        config.Formatters.Add(new JsonMediaTypeFormatter());
    }

  public class CarInputCharacteristicsDTO
{
    public int Manufacturer { get; set; }
    public int ModelType { get; set; }
    public int Fuel  { get; set; }
    public int Transmission { get; set; }
    public int BodyType { get; set; }
    public int PriceFrom { get; set; }
    public int PriceTo { get; set; }
    public int Power { get; set; }
    public int YearFrom { get; set; }
    public int YearTo { get; set; }
    public int KilometersFrom { get; set; }
    public int KilometersTo { get; set; }
}

这是我的Javascript代码:

 display.on("click", function () {
    if (isValidInput()) {
        var data = {
            Manufacturer: manufacturer.val(),
            ModelType: modelType.val(),
            Fuel: fuel.val(),
            Transmission: transmision.val(),
            BodyType: bodyType.val(),
            PriceFrom: priceFrom.val(),
            PriceTo: priceTo.val(),
            Power: power.val(),
            YearFrom: yearFrom.val(),
            YearTo: yearTo.val(),
            KilometersFrom: kilometersFrom.val(),
            KilometersTo: kilometersTo.val()
        };
        var url = "http://localhost:3471/api/Cars/PostCharacteristics";

        $.post(url, JSON.stringify(data) , function(stuff) {
            console.log(stuff);
        });
    }
});

我做错了什么?

修改

这是我的网址的基本路径:

enter image description here

问题是我在另一个案例中也以同样的方式执行了get请求,这是我的代码:

function getModelTypes(value) {
    var url = "http://localhost:3471/api/Cars/GetModelTypes/" + value;
    var modelTypeDefaultContent = "Please select a model";
    $.getJSON(url, function (arrayObjects) {
        ---
    });
}

如果需要任何其他信息,请告诉我

1 个答案:

答案 0 :(得分:1)

再次查看代码后,我意识到您缺少方法参数的[FromBody]标记。

尝试将代码更改为:

[HttpPost]
public CarInputCharacteristicsDTO PostCharacteristics([FromBody]CarInputCharacteristicsDTO characteristics)
{
    return characteristics;
}

修改

使用您提供的代码,它可以在干净的项目中正常运行。因此,其他地方必须有一些代码导致问题。正如Kiran所说,请提供完整的Global.asax文件以获得进一步的帮助。