StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1,
主持人:我使用Web API的自我教育
1 2 3 4 5 6 7 8 | public class TestController : ApiController { [HttpPost] public void Testp([FromBody]string title) { Console.WriteLine("Post"); } } |
这是一个简单的控制器这是我的客户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; } |
为什么我的结果是:
1 2 3 4 5 6 7 | {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 }} |
我觉得我有一些错误modelbinder
我可以想象您正在使用Visual Studio Web服务器进行调试(按时钟)。此端口可以随时更改,因此我猜它不再是您的URL中指定的"1010":
也许您应该在这里自动获取当前的URL。
我发现我的问题是,如果我没有用"/"结束基URI,并尝试将其预挂起到client.postasync(..它不起作用。但是如果我附加到基URI,它会这样做,
1 2 |
工作,而:
1 2 |
没有。不知道为什么,但很高兴我能很快找到答案!
如果您使用的是默认路由,那么它是restful(通过http动词,而不是rpc,通过方法名),因此您不应该发布到
您的操作签名采用一个字符串,但您将改为发布一个匿名对象。您的帖子应该是这样的(注意我们只发送字符串):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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"]; |
我也面临同样的问题。但现在解决了。您可以使用此代码。它真的会帮助你。