如何测试我的web api Post Web方法以了解内部发生了什么?

时间:2016-03-22 21:33:20

标签: javascript c# web-services testing asp.net-web-api

所以这是我的情况......

我们有一个Microsoft Dynamics CRM的本地安装,我正在尝试从它到我在另一台服务器上创建的服务进行ajax调用。我已经解决了很多问题 - 但是我现在能够通过javascript成功地通过javascript向我的服务提出GET请求。我已经在CRM中添加了一个表单。

仅供参考(因为我不完全确定这些事情是否相关)...

  • 我必须在IIS中为我的服务设置匿名身份验证(CRM有 我将依赖的自己的身份验证)
  • 我必须使用我们的CRM安装的主机地址设置Access-Control-Allow-Origin的响应标头

所以,在完成这些事情后,我能够通过GET成功调用我的Web服务。我可以从[HttpGet] web方法返回一个字符串。

但是,现在我需要通过POST调用Web方法将一些数据发布到我的Web服务。所以,下面你可以看到我对服务的实现以及我正在使用的调用POST的javascript。

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");
    }
});   

当我进行这个POST调用时,起初我可以看到它正在做一些“预检”的事情并发出OPTIONS请求 - 然后返回403(我想,如果内存为我服务)。我查了一下并通过向IIS中的Web服务添加Access-Control-Allow-Headers标头解决了该问题,其值为Origin,X-Requested-With,Content-Type,Accept

执行此操作后,我的POST实际上提供了200个状态代码 - 但是,正如您在我的代码中看到的那样,如果一切顺利,我应该在数据库中看到数据。
..那当然问题是......我的网络服务代码是否正常工作?通常我可以轻松地测试它 - 但是我对web api相当新。我现在并没有真正得到最好的测试方法 - 而且我不知道它是否与我的代码有关,或者是否存在web api本身的配置问题。

这是我的routeconfig:

 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 }
        );
    }

1 个答案:

答案 0 :(得分:2)

您应该尝试使用REST客户端。 这是两个不错的:

我个人更喜欢Postman,但两者都很好。