角4の単一ページアプリケーション(ローカルではhttp://localhost:4200/で実行)からJSONコンテンツのPOSTをREST WCF Webサービスエンドポイントに発行しようとしています(ローカルで実行されます)。エンドポイントは次のとおりです:http://localhost:3026/ToshlSrvc.svc/Add)。角4のPOSTからWCF RESTサービスへのNULL応答の返信
POSTリクエストを発行するために、標準のHttp.post()メソッド+ RxJs拡張を使用します。 Webサービスは実際にPOSTと相対的な内容を受け取って、正しく設計されたものを処理します(デシリアライズされたオブジェクトをEntity Frameworkコンテキストに追加し、DBに保存して新しいIDを返します)。
残念ながら、http.post()でリスンするために使用されるsubscribe()メソッドの "data"引数は常にNULLです! POSTレスポンスに含まれている新しいIDを取得できません!
<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1250</int>
I(この場合は1250が正しい新しいIDです):私はクロームのネットワーク活動に確認するか、場合、私は郵便配達してポストを発行する場合、私は、レスポンスボディには、以下のことがわかりここで何が間違っているのか分からない。 いくつかの提案がありますか?
何か助けていただければ幸いです。
CASEここ
は、私がWebサービスを達する方法の活字体のコードです:
public Add(resource: Entry): void{
const WEBSERVICE_ADDRESS: string = "http://localhost:3026/ToshlSrvc.svc";
const headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');
return this.http.post(this.WEBSERVICE_ADDRESS + '/Add', JSON.stringify(resource), { headers: headers})
.catch(this.handleError);
.subscribe(data => {
console.log(data); //I always get null!
});
}
はここでWebサービスのエンドポイントの宣言です:
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Add")]
int Add(EntryDTO entry);
私の身体Webサービスのエンドポイント:
int IToshlSrvc.Add(EntryDTO entry)
{
Entry newEntry = null;
//Create new entry and add to collection
if (entry.Type == eTypeDTO.Expense) {
newEntry = new ExpenseEntry();
newEntry.Id = this._provider.Expenses.Max(x => x.Id) + 1;
this._provider.Expenses.Add((ExpenseEntry)newEntry);
}
else {
newEntry = new IncomeEntry();
newEntry.Id = this._provider.Incomes.Max(x => x.Id) + 1;
this._provider.Incomes.Add((IncomeEntry)newEntry);
}
//Set values
newEntry.Categories = entry.Categories;
newEntry.Date = Convert.ToDateTime(entry.Date);
newEntry.Description = entry.Description;
newEntry.Value = entry.Value;
//Returns
return newEntry.Id;
}
OPTIONSプリフライトやPOSTリクエストのチェック:私が露出し、ここでhttps://enable-cors.org/server_wcf.html + iの空GETOPTIONSを追加するために必要などのCORSを有効にして、これらの異なるドメイン間の通信を可能にするために https://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0
私のwebserviceのエンドポイントは、ここに公開されています:Ajax POST to WCF Rest CORS-compliant WebService throws error 405。
上記のGetOptions()メソッドがなくてもEnable-Cors.org戦略がまったく機能しないため、これを行う必要がありました。私は、この問題や不適切なCORS設定がこの問題に同意できると私は思う。
私はそれが十分に「追加」ウェブサーバのエンドポイントに「ResponseFormat = WebMessageFormat.Json」を追加しました....確かにスリープ状態に入る必要があります。私の目を開いてくれてありがとう! – GiveEmTheBoot
私はそれが助けてうれしいです:) –