1

ASP.NET Web API 및 angularJs를 사용하여 웹 응용 프로그램을 개발하고 있습니다. 는이 같은 웹 API를 컨트롤러가 :웹 API 컨트롤러에서 동일한 매개 변수를 사용하는 다중 HttpPost 동작

[ActionName("AddNewState")] 
public object PostAddNewState(RegionInformation newStateParam) 
{ 
    RegionOperations regionOperation = new RegionOperations(newStateParam.StateName); 
    RegionInformation newStateInformation = regionOperation.NewStateInformation; 
    var text = new 
    { 
     newStateInformation 
    }; 
    return JsonConvert.SerializeObject(text); 
} 

[ActionName("AddNewCity")] 
public object PostAddNewCity(RegionInformation newCityParam) 
{ 
    var text = new 
    { 
     message="Hello" 
    }; 
    return JsonConvert.SerializeObject(text); 
} 

및 클라이언트 측에서 나는 POST 요청을 전송하는 이러한 기능이 있습니다

$scope.AddNewState = function() { 
    $http({ 
     method: "POST", 
     url: "api/RegionManagement/AddNewState", 
     data: { 
      StateName: $scope.state 
     } 
    }).then(function (response) { 
     var obj = JSON.parse(response.data); 
     $scope.States.push({ text: obj.newStateInformation.StateName, value: obj.newStateInformation.ID }); 
    }); 
}; 

$scope.AddNewCity = function() { 
    $http({ 
     method: "POST", 
     url: "api/RegionManagement/AddNewCity", 
     data: { 
      ParentID: $scope.RegionInptes.ParentID, 
      CityName: $scope.city 
     } 
    }).then(function (response) { 
     var obj = JSON.parse(response.data); 
     alert(obj.message); 
    }); 
}; 

내가 실행 $ scope.AddNewCity 또는 을 $ scope.AddNewState 내가 얼굴이 500 내부 서버 오류 .if 내가 코멘트 AddNewCity web api contro에서 조치 그럼 내가 $ scope.AddNewState 성공적으로 실행할 수 있습니다.

웹 API 컨트롤러에서 다중 HTTPPost를 사용하여 검색 한 결과이 해결책을 시도했습니다 : Multiple HttpPost method in Web API controller,하지만 아무 일도 일어나지 않았고 여전히 그 오류가 있습니다.

UPDATE

이 내 설정 파일입니다

public static void Register(HttpConfiguration config) 
{ 
    // Web API configuration and services 

    // Web API routes 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "ControllerOnly", 
     routeTemplate: "api/{controller}" 
    ); 

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

웹 API 구성을 표시합니다. 아마도 routeTemplate은'{controller}/{id}'입니다. 그렇다면 프레임 워크가 호출하려고하는 액션을 결정할 수 없으므로 오류가 발생합니다. {{controller}/{action}/{id}'액션을 포함하도록 템플릿을 업데이트하고 작동하는지 확인하십시오. – Nkosi

+0

@ Nkosi 업데이트 설정에 내 설정 파일을 추가하십시오 –

답변

0

순서 요청 URL의 매개 변수의 수입니다 될 수있는 당신 당신의 노선을 등록하는 것이 중요합니다. 보다 구체적인 경로를 먼저 등록하고보다 일반적인 경로를 등록하십시오.

public static void Register(HttpConfiguration config) { 
    // Web API configuration and services 

    // Web API routes 
    config.MapHttpAttributeRoutes(); 

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

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

} 

은 또한 좀 더 구체적인 처리 할 수있는 것과 같은 것으로 컨트롤러를 업데이트해야합니다.

public class RegionManagementController : ApiController { 
    [HttpPost] 
    [ActionName("AddNewState")] 
    public object PostAddNewState(RegionInformation newStateParam) { ... } 

    [HttpPost] 
    [ActionName("AddNewCity")] 
    public object PostAddNewCity(RegionInformation newCityParam) { ... } 
} 
+0

감사합니다 ... 작동합니다 ... 등록 된 경로의 순서가 솔루션입니다. –

0

이 때문에

[ActionName("AddNewState")] 
public object PostAddNewState(RegionInformation newStateParam) 
{ 
    RegionOperations regionOperation = new RegionOperations(newStateParam.StateName); 
    RegionInformation newStateInformation = regionOperation.NewStateInformation; 
    var text = new 
    { 
     newStateInformation 
    }; 
    return JsonConvert.SerializeObject(text); 
} 

[ActionName("AddNewCity")] 
public object PostAddNewCity(RegionInformation newCityParam) 
{ 

    RegionOperations regionOperation = new RegionOperations(newCityParam.ParentID, newCityParam.CityName); 
    RegionInformation newStateInformation = regionOperation.NewStateInformation; 
    var text = new 
    { 
     newStateInformation 
    }; 
    return JsonConvert.SerializeObject(text); 
} 
+0

Charan Cherry 이건 당신 같은 매개 변수 때문이라고 생각합니다. 내 코드와 같아야하고 모든 액션 메소드에서 동일한 매개 변수를 사용해야합니다. –