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 响应的主要内容,如果未能解决你的问题,请参考以下文章
在Angular 4中将数据发送到JAVA post REST API时出现CORS错误
Ajax POST 到 WCF Rest CORS 兼容的 WebService 引发错误 405
自托管 WCF REST 服务 JSON POST 方法不允许