2016-03-22 7 views
0

これは私の状況です...ウェブアプリのポストWebメソッドを調べて、内部で何が起こっているのかを知るにはどうしたらいいですか?

私たちはMicrosoft Dynamics CRMをオンザンプルでインストールしており、私たちはそのサーバーから別のサーバーで作成したサービスにajaxを呼び出そうとしています。私が解決した問題はすでに多くありましたが、CRMのフォームに入れたjavascriptを使ってCRMからサービスにGETリクエストを行うことができます。参考まで

CRMは を持っている(私は私のサービスのためにIISで匿名認証を設定する必要がありました

  • ...(これらのものが関係したりしていない場合、私は、この時点では完全にはよく分からないので)私はに頼ることになる独自の認証)
  • 私は、だから、私たちのCRMのインストール

のホストアドレスとアクセス制御 - 許可 - 起源のレスポンスヘッダを設定するために、これらのことをやった後、私がしていました正常に私のWebを呼び出すことができますGET経由での副。私は[HttpGet]ウェブメソッドから得た文字列を返すことができました。

しかし、実際には、私のWebサービスにデータを投稿するために、POSTを介してWebメソッドを呼び出す必要があります。したがって、私のサービスの実装とjavascriptの下で、私はPOST呼び出しを使用しています。

using CRMService.Models; 
using System; 
using System.Collections.Generic; 
using System.Collections.Specialized; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Net.Mail; 
using System.Web; 
using System.Web.Http; 

namespace CRMService.Controllers 
{ 
    public class DefaultController : ApiController 
    { 
     // GET: Default 
     public string Get() 
     { 
      return "Hi"; 
     } 

     [HttpPost] 
     public string GiveParameters(TestClass tc) 
     { 
      try 
      { 
       Dictionary<string, object> Parameters = new Dictionary<string, object>(); 
       Parameters.Add("id", tc.id); 
       Parameters.Add("one", tc.one); 
       Parameters.Add("two", tc.two); 
       NonQuery("InsertTestItem", ConfigurationManager.ConnectionStrings["TestConnection"].ToString(), Parameters); 
       return "success"; 
      } 
      catch (Exception ex) 
      { 
       return "ex"; 
      } 
     }    
    } 
} 


var new_budget = Xrm.Page.data.entity.attributes.get("new_budget").getValue(); 
var new_name = Xrm.Page.data.entity.attributes.get("new_name").getValue(); 
var id = Xrm.Page.data.entity.getId(); 
data = '{"TestClass":{"one":"' + new_name + '", "two":"'+ new_budget +'", "id":"'+ id +'"}}' 

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "https://<hiddingMyUrl>/api/Default/GiveParameters", 
    data: data, 
    dataType: "json", 
    success: function(data) { 
     console.log("Success"); 
    }, 
    error: function(result) { 
     console.log("Error"); 
    } 
}); 

最初、私はそれはいくつかの「プリフライト」のものをやってOPTIONS要求を作っていた見ることができた時に、私は、このPOSTの呼び出しを行う

- それから帰国403(メモリが右の私を提供する場合、私は、と思います)。私はこれを見て、IISのWebサービスにOrigin、X-Requested-With、Content-Type、Acceptの値を持つAccess-Control-Allow-Headersヘッダーを追加することでその問題を解決しました。

POSTは実際には200個のステータスコードを与えますが、私のコードでわかるように、すべてがうまくいけばデータベース内のデータを見るべきです。
..もちろん、問題は...私のWebサービスコードが正しく動作しているかどうかです。そして、通常、私はそれを簡単にテストすることができます - しかし、私はかなりWeb APIに新しいです。私は実際にこの時点でテストするための最善の方法を得ていません。具体的に自分のコードを使っているのか、Web API自体に何らかの設定上の問題があるのか​​どうかはわかりません。あなたは、RESTクライアントで作業してみてください

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

答えて

2

は、ここに私のrouteconfigです。私は個人的にポストマンを好むが、本当に両方が良好である

: は、ここでは、2つの素晴らしいものです。

+0

私はフィドラーでちょっと混乱しました。私はフィドラーを何度も使用しており、それに慣れています。しかし、応答ヘッダーとそれ以外のものがあれば、私はPOSTやGETを手に入れることができませんでした。 – JzInqXc9Dg

+0

郵便配達員を使用して私はPOSTから415 - Unsupposed Media Typeを取得します。 msgstr "リクエストエンティティのメディアタイプ 'text/plain'はこのリソースではサポートされていません。" 私はそのエラーを見て、この記事を見つけました:http:// stackoverflow。com/questions/22384354/error-sending-json-in-web-api-service CORSに関する話がありますが、content-typeはapplication/jsonとして設定する必要があります。 CORSの状況でそれを可能にする特定のヘッダー。しかし、私はそのヘッダーを見つけることができません – JzInqXc9Dg

+0

私はあなたが次のヘッダーを追加する必要がありますと思います: 受け入れる:アプリケーション/ json コンテンツタイプ:アプリケーション/ jsonの –

関連する問題