Angular 4 단일 페이지 응용 프로그램 (로컬에서는 http://localhost:4200/에서 실행 됨)에서 JSON 콘텐츠의 POST를 REST WCF 웹 서비스 끝점 (로컬로 실행되고 엔드 포인트는 다음과 같습니다. http://localhost:3026/ToshlSrvc.svc/Add).Angular 4 POST to WCF REST 서비스가 NULL 응답을 반환합니다.
표준 Http.post() 메서드 + RxJs 확장을 사용하여 POST 요청을 보냅니다. webservice 실제로 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입니다) : 내가 크롬의 네트워크 활동을 확인하거나 경우에 내가 우체부로 게시물을 발행하지만 내가 응답 본문은 다음과 같은 것을 볼 수 여기서 무엇이 잘못되었는지를 알 수 없습니다. 몇 가지 제안 사항이 있으십니까?
도움을 주시면 감사하겠습니다. 여기
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!
});
}
는 웹 서비스의 엔드 포인트의 선언입니다 :
경우 여기
내가 웹 서비스에 도달하는 방법의 타이프 스크립트 코드의의
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Add")]
int Add(EntryDTO entry);
몸을 내 웹 서비스의 끝점 :
개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;
}
옵션 프리 플라이트 및 POST 요청 검사 :이 서로 다른 도메인 간의 통신을 허용하기 위해 https://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0
내가 여기 노출 https://enable-cors.org/server_wcf.html 같은 CORS를 사용하도록 설정 + 나는 빈 GetOptions을 추가 할 필요() 엔드 포인트는 여기에 노출 된 웹 서비스에서 Ajax POST to WCF Rest CORS-compliant WebService throws error 405입니다.
위와 같은 GetOptions() 메서드가 없으면 Enable-Cors.org 전략이 전혀 작동하지 않기 때문에이 작업을 수행해야했습니다. 이 시점에서 또는 잘못된 CORS 설정이이 문제에 동의 할 수 있다고 생각합니다.
나는 확실히 잠을 자야한다 .... "추가"웹 서버 엔드 포인트에 "ResponseFormat = WebMessageFormat.Json"을 추가하는 것으로 충분했다. 내 눈을 열어 주셔서 대단히 감사합니다! – GiveEmTheBoot
도움이 된 것을 기쁘게 생각합니다. :) –