2017-11-26 19 views
0

私はWCFの「POST」メソッドを使用しようとしているが、私はそれを使用することはできません、私は私のWCFサービスで使用できる唯一のことはあるメソッドが、問題を「GET」私はオブジェクトを送信する "POST" メソッドを使用しようとすると起動します。エラー400不正な要求AJAX(WCF)

ここでは、私の契約

[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を呼び出す内部ヘッダにあると思います。

+1

を私が言った404 ERROR持っている: "400 BAD REQUEST" は –

+0

WCFと呼ばれるサービスのための最高のアイデアではありませんがJavascriptのようなクライアントによるRESTを通して。このためには、ASP.NET Web APIのようなより特殊なフレームワークを使用する必要があります。ここ –

+0

問題は、私はソフトウェアのプログラミングを勉強し、教授が、それはWCFを使用して...彼らはこのプロジェクトのためのWeb APIを許可していませんでした... #WhatAShame –

答えて

0

私は、これは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); 
       } 
      }); 
     } 
+0

:)そんなにUをありがとう...あなたは私のために大きな努力を行うことができますか? 私は本当によ疲れ –

+0

は、このメソッドを呼び出すときに、サービス側でヒットデバッガです –

+0

うん、私は右ここにデバッガを置く:?!?。 –

0

@Hameed うん!私は右のそれをここに置く:

debugger; 
     $.ajax({ 
      url: "http://localhost:83/WCFPruebaServicio/Servicio.svc/AgregarObjeto", 

      data: JSON.stringify(objetoPersona), 
      async: false, 
      crossDomain: true, 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; utf-8", 
      success: function (msg) { 
       try { 
        alert('Si se pudo :) '+msg); 
       } catch (Exception) { 
        alert(Exception); 
       } 
      }, 
      error: function (result) { 
       alert("Error " + result.status + '' + result.statusText); 
      } 
     }); 
関連する問題