1

我想發佈一些數據到Web API控制器,但我似乎在這裏取回一個404 NOT FOUND響應是我的代碼:404沒有導致從後Ajax調用

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 code:

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); 
     }); 
    } 
}); 

我在做什麼錯?

編輯

這是爲了我的URL的基本路徑:

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) { 
     --- 
    }); 
} 

如果需要其他信息,請讓我知道

+0

因爲我不知道您的應用程序的IIS Express設置是什麼,所以我無法分辨URL是否不正確,但我建議將AJAX調用中定義的URL更改爲相對「/ api/Cars/PostCharacteristics「,然後讓客戶理清其餘部分。除非您能夠提供更多細節,否則這是目前我可以提供的最佳信息。 – Inari

+0

您是否看到404響應正文中的任何其他信息?......還可以共享您的Global.asax配置... –

回答

1

再次查看代碼後,我意識到您遺漏了方法參數的[FromBody]標記。

嘗試的代碼更改爲如下:

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

編輯:

使用您所提供的代碼,它工作正常在一個乾淨的項目。所以在其他地方必須有一些代碼導致這個問題。正如Kiran所說,請提供完整的Global.asax文件以獲得進一步的幫助。

+0

這與我認爲它與路由有關的結果是一樣的。我只能調用具有此格式的url/{controller}/{action}/{Id} – aleczandru