错误 400 错误请求 AJAX (WCF)

Posted

技术标签:

【中文标题】错误 400 错误请求 AJAX (WCF)【英文标题】:Error 400 Bad Request AJAX (WCF) 【发布时间】:2018-05-09 13:47:13 【问题描述】:

我正在尝试在 WCF 中使用“POST”方法,但我不能使用它,我可以在 WCF 服务中使用的唯一方法是“GET”方法,但是当我尝试使用“POST”时问题就开始了" 发送对象的方法:

这里有我的合同

[ServiceContract]
public interface Itest

    [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    [OperationContract]
    string Hello();

    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare )]
    [OperationContract]
    void AddObject(Person p);

    [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    [OperationContract]
    string TurnBack(string Name);

我的对象:

namespace Mywcf
 
    [DataContract] 
    public class Person 
     
        [DataMember] 
        public string Name  get; set;  
     

我的实现:

namespace Mywcf 
 
    public class Implementacion : Itest 
     
        public string Hello() 
         
            return "Hi"; 
        

        public void AddObject(Person p)
        
            string Name = p.Name;
            TurnBack(Name);
        

        public string TurnBack(string Name) 
        
            return Name;
        
    

我的 .ASPX(包括我的脚本):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="scripts/jquery-3.2.1.js"></script>
    <!--This SCRIPT Use my WCF as a 'GET'Method and works really good-->
    <script>
        $(document).ready(function() 
            $("#btnHi").click(function() 
                Hello();
            );
        );

        function Hello() 
            $.ajax(
                url: "http://localhost:83/Mywcf/Service.svc/Hello",
                dataType: "json",
                data: "",
                type: "GET",
                contentType: "application/json; utf-8",
                success: function(msg) 
                    try 
                        alert(msg);
                     catch (Exception) 
                ,
                error: function(result) 
                    alert("Error " + result.status + '' + result.statusText);
                
            );
        
    </script>
    <!--This SCRIPT has many issues (404 BAD REQUEST )I use the WCF as a 'POST' Method-->
    <script>
        $(document).ready(function() 
            $("#btnConfirm").click(function() 
                var name = $('#txtTest').val();
                Insert(name);
            );
        );

        function Insert(name) 
            var objectPerson = 
                "Name": name
            ;
            var stringJ = JSON.stringify(objectPerson);
            $.ajax(
                url: "http://localhost:83/Mywcf/Service.svc/AddObject",
                dataType: "json",
                data: "'p':" + stringJ + "",
                type: "POST",
                contentType: "application/json; utf-8",
                success: function(msg) 
                    try 
                        alert(msg);
                     catch (Exception) 
                        alert(Exception);
                    
                ,
                error: function(result) 
                    alert("Error " + result.status + '' + result.statusText);
                
            );
        
    </script>
    <title>TESTING WCF</title>
</head>

<body>
    <input type="button" id="btnHi" value="Hello" /> <br />
    <input type="text" id="txtTest" placeholder="Tip a Name" />
    <input type="button" id="btnConfirm" value="Ok" />
</body>
</html>

我认为问题出在合同内的标头或我调用 AJAX 时。

【问题讨论】:

我有 404 错误说:“400 BAD REQUEST” WCF 对于像 javascript 这样的客户端通过 REST 调用的服务并不是最好的主意。您应该为此使用更专业的框架,例如 ASP.NET Web Api。 这里的问题是我正在学习软件编程,教授们希望使用 WCF...他们不允许这个项目使用 Web Api...#WhatAShame 修复您的代码 - "application/json; utf-8" 必须是 "application/json; charset=utf-8" 没错,它正在工作!!!非常感谢你:) 【参考方案1】:

我认为这是附加 json 数据的错误方式。

 data: "'p':" + stringJ + "",

只是忽略 p 传递它或以适当的方式连接 json stringify。

function Insert(name) 
            var objectPerson = 
                "Name": name
            ;
           // var stringJ = JSON.stringify(objectPerson);
            $.ajax(
                url: "http://localhost:83/Mywcf/Service.svc/AddObject",
                dataType: "json",
                data: JSON.stringify(objectPerson),
                type: "POST",
                contentType: "application/json; utf-8",
                success: function(msg) 
                    try 
                        alert(msg);
                     catch (Exception) 
                        alert(Exception);
                    
                ,
                error: function(result) 
                    alert("Error " + result.status + '' + result.statusText);
                
            );
        

【讨论】:

自从我发布此内容后,我一直在尝试...但无法正常工作:(我认为这是我的合同问题...您能帮我大忙吗?我真的很累 调用此方法时调试器是否在服务端命中? No..你看到我如何修饰输入名称的数据了吗..? 看看我上面的回复

以上是关于错误 400 错误请求 AJAX (WCF)的主要内容,如果未能解决你的问题,请参考以下文章

使用 GET 访问 WCF 休息服务时出现 400 http 错误请求错误

WCF - 远程服务器返回意外响应:(400)错误请求

将文件数据传递给 C# WCF 服务函数(错误 400 错误请求)

wcf 服务错误请求 400 流式传输

WCF:自托管服务上的 HTTP 400 错误请求

WCF 服务 400 错误请求