2017-08-28 24 views
0

好吧,我相信我已經接近這個工作,但似乎無法讓WebAPI控制器識別,除非我在URI中傳遞參數。

我...... 角度使用這樣的$資源......這集的URL,並將此數據調用的WebAPI

var savePromise = myService.common.SaveData.save({},{ ID: saveObj.ID, Year: saveObj.Year, typeID: saveObj.TypeID, ObjectList: JSON.stringify(saveCollection) }).$promise; 

服務...保存數據:$ resource(myURL,{})

的WebAPI控制器...

public class ObjectsSaveController : ApiController 
{ 

    [System.Web.Http.HttpPost] 
    public HttpResponseMessage POST([FromBody] int ID, int Year, 
    int typeID, string ObjectList) { 


Request URL:myURL/api/ObjectsSave 
Request Method:POST 
Status Code:404 Not Found 
Remote Address:[::1]:8081 
Referrer Policy:no-referrer-when-downgrade 
Response Headers 
view source 
Access-Control-Allow-Origin:* 
Cache-Control:no-cache 
Content-Length:791 
Content-Type:application/json; charset=utf-8 
Date:Mon, 28 Aug 2017 21:11:09 GMT 
Expires:-1 
Persistent-Auth:true 
Pragma:no-cache 
Server:Microsoft-IIS/8.5 
X-AspNet-Version:4.0.30319 
X-Powered-By:ASP.NET 
Request Headers 
view source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8 
Cache-Control:no-cache 
Connection:keep-alive 
Content-Length:210 
Content-Type:application/json;charset=UTF-8 
Host:localhost:8081 
Origin:http://localhost:8081 
Pragma:no-cache 
Referer:http://localhost:8081/myURL/ 
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36 
Request Payload 
view source 
{ID: 211313, Year: 2017, typeID: 7,…} 
cropYear 
: 
2017 
ID 
: 
211313 
ObjectList 
: 
"[{"ID":-1,"Name":"","geoJSONShape":"{\"type\":\"Point\",\"coordinates\": 
[-99.35464723335105,41.54277522419835]}"}]" 
typeID 
: 
7 
Name 

如果我沒有在查詢字符串傳遞值則ApiController不會被發現。

任何幫助表示讚賞!

回答

0

好吧,我已經成功地使用POST在AngularJS發送數據...繼承人我是如何做到的?

接過我經過,並把它們放在一個JavaScript對象的參數...

var objData = { 
        Var1: Var1Value, 
        Var2: Var2Value, 
        Var3: Var3Value, 
        Var4: Var4Value 
       } 

傳遞一個 「保存」 請求對象...

var savePromise = myService.common.SavePostData.save({}, objData).$promise; 

我有我的資源在建立呼叫服務,並執行... (功能(角度,未定義){ 'use strict';

angular.module('mynamespace.myservice', [ 
    // Angular 
    'ngResource' 
]) 
.factory('myservice', ['$resource', function ($resource) { 
     return { 
      common: { 
      SavePostData: $resource(myURL, {}) 
      } 
     }; 
    }]); 

}(angular));

OKAY !!現在最重要的部分! 在WebApi方面你必須創建一個POST的數據模型映射到... 〜注意變量的「情況」必須匹配!

using System.Collections.ObjectModel; 
namespace myNamespace { 

public class DataModelThatMatchesRequest { 
    public int Var1 { 
     get; 
     set; 
    } 

    public int Var2 { 
     get; 
     set; 
    } 
    public int Var3 { 
     get; 
     set; 
    } 

    public Var4 { 
     get; 
     set; 
    } 

} 

}

現在創建一個使用你的數據模型的ApiController ... 〜注意,您必須有裝飾 「[HttpPost]」 和行動裝飾 「[FromBody]」

public class SaveObjectController : ApiController { 

    [HttpPost]   
    public Objects POST([FromBody] DataModelThatMatchesRequest saveRequest) 
    { 

    Do some stuff with "saveRequest" 

    } 

我希望這可以幫助你!