【问题标题】:Posting to WCF json endpoint with angular使用角度发布到 WCF json 端点
【发布时间】:2014-04-17 02:38:11
【问题描述】:

我正在尝试从 Angular 发布到 WCF json 服务端点,但我的尝试没有成功。我已验证该服务正在通过其他方式运行并适用于指定的 URL。

使用萤火虫我可以看到输出的请求是这样的:

NetworkError: 400 错误请求 - http://www.myapi.com/V1/Service.svc/Authenticate?Password=password&UserName=username"

角码

app.service('UserService', function ($http) {
this.GetLoginStatus = function (AuthenticateRequest) {
    $http({
        url: APIURL + "/Authenticate",
        method: "POST",
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        params: AuthenticateRequest,
        data: {
            'Code': 'test data'
        }
    });
};

});

WCF 服务

[WebInvoke(RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped)]
[OperationContract]
AuthenticateResponse Authenticate(AuthenticateRequest Request);

请求定义

[DataContract]
public class AuthenticateRequest
{
    [DataMember]
    public String UserName { get; set; }
    [DataMember]
    public String Password { get; set; }
}

【问题讨论】:

  • 您在哪里设置/定义服务的基本身份验证?您确定身份验证字符串是好的吗?你在 chrome 中使用邮递员吗?
  • 我更新了我的代码并删除了该行。我确实使用过邮递员。
  • 我对 WCF 不是很熟悉,但是添加 XML 元素的不是 Wrapped() 样式吗?如果目的是让 api 只说 json,也许你不想要那个?另外,我不禁认为您可能希望将内容发送到正文、数据属性中,而不是作为查询参数(因为服务需要 POST)。

标签: javascript json web-services wcf angularjs


【解决方案1】:

我设法通过对 javascript 对象进行字符串化来完成这项工作。

    Service.js

        angular.module('myModule').factory('serviceFac', ['$http', '$q', 
function (a, b) 
    {   var taskMergeServiceNameSet = "WebServuice.svc/Tasks/SetTasks";
            return {
                setTasksMerge: function (taskIds, action) {

                 var objArray = '';
                 var obj = {
                        taskIds: taskIds,
                        action: action,
                        userName: "ss"
                  };
                 objArray = new Array();
                 objArray.push(obj);
                 var deferred = b.defer();
                 a({
                   url: taskMergeServiceNameSet,
                   method: 'POST',
                   headers: { 'Content-Type':'application/json; charset=utf-8'},
                   data: JSON.stringify(objArray)
                  }
                  ).sucess(function (data) { deferred.resolve(data) })
                  .error(function (msg, code) { deferred.reject(msg) });    
                    return deferred.promise;
                }
            }
        }]);

服务合同

ServiceContract Interface

[ServiceContract]
public interface ITasks
{
   [OperationContract]
    [WebInvoke(Method = "POST",RequestFormat=WebMessageFormat.Json ,
      ResponseFormat =   WebMessageFormat.Json, 
      UriTemplate = "Tasks/SetTasksForMerge")]
    string CreateNewTaks(valObj[] values);        
}

[DataContract]
public class valObj
    {
    [DataMember]
    public string taskIds { get; set; }
    [DataMember]
    public string action { get; set; }
    [DataMember]
    public string userName { get; set; }
    }

发布here 对我帮助很大。如果您成功传递了 JSON 字符串,请告诉我

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多