C# Fiddler测试通过[Frombody]类的API Post

C# Fiddler测试通过[Frombody]类的API Post,c#,asp.net-web-api,fiddler,C#,Asp.net Web Api,Fiddler,我有一个非常简单的C#APIController,名为“TestController”,其API方法如下: [HttpPost] public string HelloWorld([FromBody] Testing t) { return t.Name + " " + t.LastName; } Contact只是一个如下所示的类: public class Testing { [Required] public string Name; [Required]

我有一个非常简单的C#APIController,名为“TestController”,其API方法如下:

[HttpPost]
public string HelloWorld([FromBody] Testing t)
{
    return t.Name + " " + t.LastName;
}
Contact只是一个如下所示的类:

public class Testing
{
    [Required]
    public string Name;
    [Required]
    public string LastName;
}
config.Routes.MapHttpRoute(
     name: "TestApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);
我的路由器如下所示:

public class Testing
{
    [Required]
    public string Name;
    [Required]
    public string LastName;
}
config.Routes.MapHttpRoute(
     name: "TestApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);
问题1
如何从C#Client测试这一点

对于#2,我尝试了以下代码:

private async Task TestAPI()
{
    var pairs = new List<KeyValuePair<string, string>> 
    {
       new KeyValuePair<string, string>("Name", "Happy"),
       new KeyValuePair<string, string>("LastName", "Developer")
    };

    var content = new FormUrlEncodedContent(pairs);

        var client = new HttpClient();                        
        client.DefaultRequestHeaders.Accept.Add(
             new MediaTypeWithQualityHeaderValue("application/json"));

        var result = await client.PostAsync( 
             new Uri("http://localhost:3471/api/test/helloworld", 
                    UriKind.Absolute), content);

        lblTestAPI.Text = result.ToString();
    }
专用异步任务TestAPI()
{
var pairs=新列表
{
新的KeyValuePair(“名称”、“快乐”),
新的KeyValuePair(“姓氏”、“开发者”)
};
var内容=新FormUrlEncodedContent(成对);
var client=新的HttpClient();
client.DefaultRequestHeaders.Accept.Add(
新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var result=wait client.PostAsync(
新Uri(“http://localhost:3471/api/test/helloworld", 
乌里金(绝对),内容);
lblTestAPI.Text=result.ToString();
}
问题2
如何从Fiddler处测试此功能?
似乎找不到如何通过UI传递类。

对于问题1: 我将从.NET客户端实现POST,如下所示。 注意:您需要添加对以下程序集的引用: a) System.Net.Http b)System.Net.Http.Formatting

public static void Post(Testing testing)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://localhost:3471/");

        // Add an Accept header for JSON format.
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

        // Create the JSON formatter.
        MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();

        // Use the JSON formatter to create the content of the request body.
        HttpContent content = new ObjectContent<Testing>(testing, jsonFormatter);

        // Send the request.
        var resp = client.PostAsync("api/test/helloworld", content).Result;

    }
关于问题2: 在Fiddler中,更改GET to POST下拉列表中的动词,并将其放入JSON 请求正文中对象的表示形式


不幸的是,如果我将[FromBody]移除,小提琴手将找不到它,并得到404。C#客户机代码无论以哪种方式都不会得到响应。传递内容类型时需要[FromBody]:application/json。如果删除该选项,则需要传递一个内容类型:application/x-www-form-urlencodedIs您为什么使用URL编码的内容而不是使用“Content-Type:application.json”来指定正文中的有效负载?对于复杂类型,您希望使用正文而不是查询字符串。您的控制器中是否定义了多个POST操作?你能发布完整的控制器代码吗?没有真正的原因。我主要学习API和测试各种东西。毫无疑问,Json是大型机构的发展方向。我只是想让它在Fiddler上工作(它现在就是这样)。谢谢你的意见!!我刚刚完成了一个入站Twilio的工作。在Fiddler中,我添加了内容类型:application/x-www-form-urlencoded到标题中,然后在正文中添加以下内容:Sid=replace+替换为+original+Sid+for+status+callback&AccountSid=assigned+by+twilio&From=%2B122334444&to=%2B15556667777&body=something+really+witty&status=sent参数的名称与班级。