4

我使用 Web api 自主机:

public class TestController : ApiController
{
    [HttpPost]
    public void Testp([FromBody]string title)
    {
        Console.WriteLine("Post");
    }
}

这是简单的控制器,这是我的客户:

client.BaseAddress = new Uri("http://localhost:1010");
      const string englishTitle = "TesteDelete";
      var post = client.PostAsync("Test/Testp", new
      {
                    title = englishTitle
                }, new JsonMediaTypeFormatter());
                var result = post.Result;
                if (result.IsSuccessStatusCode)
                {

                }
                else
                {
                    string content = result.Content.ReadAsStringAsync().Result;

                }

为什么我的结果是:

{StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Date: Sun, 21 Apr 2013 12:00:03 GMT
  Server: Microsoft-HTTPAPI/2.0
  Content-Length: 165
  Content-Type: application/json; charset=utf-8
}}

我认为我的模型绑定器有一些错误

4

4 回答 4

5

我想您正在使用 Visual Studio Web 服务器进行调试(按时钟)。这个端口可以随时更改,所以我猜它不再是 URL 中指定的“1010”:

"http://localhost:1010"

也许您应该查看此处以自动获取当前 URL。

于 2013-04-21T12:11:00.670 回答
1
  1. 如果您使用的是默认路由,它是 RESTful(通过 HTTP 动词,而不是 RPC,按方法名称),因此您不应该发布到http://localhost:1010/Test/Testphttp://localhost:1010/Test

  2. 您的操作签名需要一个字符串,但您正在发布一个匿名对象。您的 POST 应该如下所示(注意我们只发送字符串):

    var post = client.PostAsync("Test", englishTitle, new JsonMediaTypeFormatter());

于 2013-04-22T03:04:09.403 回答
1
var url = URL;
            var data = new FormUrlEncodedContent(new[] {
                    new KeyValuePair<string, string>("client_id", FRAppConfigKeys.GetValue("ClientId")),
                    new KeyValuePair<string, string> ("client_secret", FRAppConfigKeys.GetValue("ClientSecret")),
                    new KeyValuePair<string, string>("grant_type", FRAppConfigKeys.GetValue("GrantType") ),
                    new KeyValuePair<string, string>("username", FRAppConfigKeys.GetValue("UserName")),
                    new KeyValuePair<string, string> ("password", FRAppConfigKeys.GetValue("Password"))
                }
            );
            HttpResponseMessage response = client.PostAsync(url, data).Result;
            var result = response.Content.ReadAsStringAsync().Result;
            Dictionary<string, string> tokenDictionary =
               JsonConvert.DeserializeObject<Dictionary<string, string>>(result);
            string token = tokenDictionary["access_token"];

我面临同样的问题。但现在解决了。您可以使用此代码。它真的会帮助你。

于 2018-09-10T05:27:06.010 回答
1

我发现我的问题是,如果我没有以“/”结束基本 URI,并尝试将其预先添加到 client.PostAsync(.. 它不会工作。但如果我附加到基本 uri,它会喜欢所以,

using (HttpClient client = new HttpClient(handler) { BaseAddress = new  Uri("https://test.test.com/somepath/") })
 var response = client.PostAsync("Broadcast/Order", content).Result;

工作,同时:

 using (HttpClient client = new HttpClient(handler) { BaseAddress = new Uri("https://test.test.com/somepath") })
 var response = client.PostAsync("/Broadcast/Order", content).Result;

才不是。不知道为什么,但很高兴我很快就弄清楚了!

于 2017-05-25T22:49:43.913 回答