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

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

这是我的情况...

我们有一个 Microsoft Dynamics CRM 的本地安装,我正试图从它发出一个 ajax 调用到我在另一台服务器上创建的服务。我已经解决了很多问题 - 但此时我能够通过我在 CRM 中的表格上放置的 javascript 成功地从 CRM 向我的服务发出 GET 请求。

仅供引用(因为我现在不完全确定这些东西是否相关)...

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

因此,在完成这些操作之后,我能够通过 GET 成功调用我的 Web 服务。我可以从 [HttpGet] 网络方法中返回一个字符串。

但是,现在我需要通过 POST 实际调用一个 Web 方法来将一些数据发布到我的 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");
    }
});   

当我进行此 POST 调用时,起初我可以看到它正在执行一些“预检”操作并发出 OPTIONS 请求 - 然后返回 403(我想,如果没记错的话)。我查看并解决了这个问题,方法是在 IIS 中向我的 Web 服务添加一个 Access-Control-Allow-Headers header ,其值为 Origin、X-Requested-With、Content-Type、Accept

这样做之后,我的 POST 实际上给出了 200 状态代码 - 但是,正如您在我的代码中看到的那样,如果一切顺利的话,我应该会在数据库中看到数据。
..那么问题当然是......我的网络服务代码是否正常工作?通常我可以很容易地测试它——但是我对 web api 还很陌生。在这一点上,我真的没有得到最好的测试方法 - 我不知道它是否与我的代码有关,或者 web api 本身是否存在一些配置问题。

这是我的路由配置:

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

最佳答案

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

我个人更喜欢 Postman,但实际上两者都不错。

关于javascript - 我如何测试我的 web api Post Web 方法以了解内部发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165654/

相关文章:

javascript - 使用 CSS 在单选按钮图像上显示覆盖

c# - Entity Framework 以一对多方式替换集合的正确方法

c# - 如何使结构不可变?

web-services - 如何跟踪 Web 服务引发的 IIS 500 错误

c# - 重用来自另一个服务引用的现有类

java - "org.apache.cxf.interceptor.Fault: null while invoking"异常解决方法好吗?我找不到原因。 (附上日志)

javascript - 如何在循环中不断查找数组中的最大值并不断增加最大值确定的次数?

javascript - 无法获取未定义或空引用的属性 'style'

javascript - 处理来自 API 的 JSON 中的语法错误

c# - LINQ 左连接可空值