1

私はASP.NET Web APIとangularJsを使用してWebアプリケーションを開発しています。 私はこのようなウェブAPIコントローラがあります。私は$ scope.AddNewCityを実行するとWeb APIコントローラで同じパラメータを使用する複数のHttpPostアクション

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

POSTリクエストを送信するため

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

をし、クライアント側で、私は、これらの機能を持っています$ scope.AddNewState私はと対峙しています500内部サーバーエラー .if私はコメントしますAddNewCity web in api controその後、$ scope.AddNewStateを正常に実行できます。

web 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

ためにパラメータの数であるかもしれませあなたのルートを登録することが重要です。より具体的なルートを最初に登録し、より一般的なルートを登録します。

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

は、これが理由で、あなたのリクエストURL

[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これはあなたのようなパラメータです私のコードと同じでなければならず、すべてのアクションメソッドで同じパラメータを使用する –

関連する問題