404

1

나는 웹 API를 컨트롤러로 일부 데이터를 게시하려고하지만 난 여기에 404 찾을 수 없음 응답을 다시 가져 오는 것 같다 내 코드 포스트 아약스 호출의 결과 없습니다 :404

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

그리고 이것은 내입니다 자바 스크립트 코드 :

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

라우팅과 관련이 있다고 생각하는 것과 같은 결과입니다. api/{controller}/{action}/{Id} 형식의 URL 만 호출 할 수 있습니다. – aleczandru