Angular 4 POST到WCF REST服务返回NULL响应

时间:2017-12-08 17:40:57

标签: angular rest wcf post cors

我正在尝试从Angular 4单页面应用程序(在http://localhost:4200/本地运行)向REST WCF Web服务端点发出JSON内容的POST(在本地运行,端点如下: http://localhost:3026/ToshlSrvc.svc/Add)。

我使用标准的Http.post()方法+ RxJs扩展来发出POST请求。 Web服务实际上接收POST和相关内容,并且它正确地执行它的设计(将反序列化的对象添加到实体框架上下文,持久保存到DB并返回新的Id),因此在所有客户端和服务器端都没有错误。

不幸的是,用于监听http.post()的subscribe()方法的“数据”args始终为NULL!我无法将新的Id包含在POST响应中!但是,如果我检查Chrome的网络活动,或者如果我发布PostMan帖子,我会看到响应正文如下:

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1250</int>

(在这种情况下为1250是正确的新ID)

我无法弄清楚这里有什么问题。 你有什么建议吗?

感谢任何帮助。

案例

以下是我如何访问webService的TypeScript代码:

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

这是webservice端点的声明:

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Add")]
int Add(EntryDTO entry);

我的webservice终端的主体:

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://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0

为了允许这些不同域之间的通信,我已经启用了CORS,就像这里暴露https://enable-cors.org/server_wcf.html +我需要在我的web服务中添加一个空的GetOptions()端点,如此处公开:Ajax POST to WCF Rest CORS-compliant WebService throws error 405。< / p>

我需要这样做,因为如果没有上述GetOptions()方法,Enable-Cors.org策略根本不起作用。我认为这一点或错误的CORS设置可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的服务返回XML。尝试将响应类型设置为JSON。