0

Okay, ich glaube, ich bin kurz davor, diese Funktion zu haben, kann aber meinen WebAPI-Controller nicht erkennen, wenn ich keine Parameter im URI übergebe.

Ich habe ... Angular, die $ Ressource wie diese verwendet ...

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

Dienst, der die URL sammelt und leitet diese Daten, um die WebAPI Aufruf ...

Savedata: $ resource (myURL, {})

WebAPI Controller ...

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 

Wenn ich keine Werte in die Query-String übergeben dann die ApiController erhalten nicht gefunden.

Jede Hilfe wird geschätzt !!

Antwort

0

Okay, ich habe POST erfolgreich verwendet, um Daten in AngularJS zu senden ... heres, wie ich es tat ...

die Parameter Nahm ich vorging und sie in einem JavaScript-Objekt setzen ...

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

Pass, die in einem "Speicher" Request-Objekt ...

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

Ich habe meine Ressource in einem Dienst, der den Aufruf erstellt und ausführt ... (Funktion (eckig, undefined) { 'Verwendung strict';

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

} (eckig));

OKAY !! Jetzt der wichtigste Teil !!! Auf der WebApi Seite müssen Sie MUST erstellen Sie ein Datenmodell für den POST zu zuordnen ... ~ beachten Sie den "Fall" der Variablen müssen übereinstimmen!

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

} 

}

Jetzt eine ApiController erstellen, die Ihr Datenmodell verwendet ... ~ beachten Sie Dekorateur haben müssen "[Httppost]" und Action-Dekorateur "[FromBody]"

public class SaveObjectController : ApiController { 

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

    Do some stuff with "saveRequest" 

    } 

Ich hoffe, das hilft dir !!

Verwandte Themen