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

Posted

技术标签:

【中文标题】Angular 4 POST 到 WCF REST 服务返回 NULL 响应【英文标题】:Angular 4 POST to WCF REST service returns NULL response 【发布时间】:2018-05-23 00:10:10 【问题描述】:

我正在尝试将 JSON 内容从 Angular 4 单页应用程序(通过 http://localhost:4200/ 在本地运行)发布到 REST WCF Web 服务端点(在本地运行,端点如下:@987654322 @)。

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

不幸的是,用于侦听 http.post() 的 subscribe() 方法的“数据”参数始终为 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!
                     );
   

这是 web 服务端点的声明:

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

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。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我应该去睡觉了....将“ResponseFormat = WebMessageFormat.Json”添加到“添加”网络服务器端点就足够了。非常感谢你让我大开眼界! 我很高兴它有帮助:)

以上是关于Angular 4 POST 到 WCF REST 服务返回 NULL 响应的主要内容,如果未能解决你的问题,请参考以下文章

尝试发布到 wcf rest 4 服务时出现错误请求

在Angular 4中将数据发送到JAVA post REST API时出现CORS错误

Ajax POST 到 WCF Rest CORS 兼容的 WebService 引发错误 405

自托管 WCF REST 服务 JSON POST 方法不允许

将 JSON 发送到 WCF Rest 服务 - 对象始终为空

WCF Rest POST 方法接受 JSON 和 XML