1

我正在使用ASP.NET Web Api和angularJs開發Web應用程序。 我有一個Web API控制器是這樣的:在Web 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 I face with 500內部服務器錯誤 .if我的評論AddNewCity action in web 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}',如果是這樣,那麼這就是爲什麼你會得到錯誤,因爲框架無法確定你試圖調用哪個動作。更新模板,以包括行動'{控制器}/{動作}/{編號}',看看是否可行 – 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櫻桃我認爲這是因爲像你一樣的參數,但它應該像我的代碼,並在每個行動方法 –

相關問題