如果这个问题看似微不足道,但对WebAPI不熟悉我不能道歉 让客户端访问Put Methods 这是我的WebAPI方法
public class TestController : ApiController
{
[HttpPut]
public HttpResponseMessage Put(string id)
{
var response = new HttpResponseMessage();
response.Headers.Add("Message","Success");
return response;
}
}
路线配置
//configure the webapi so that it can self host
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{Controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional }
);
客户端
var baseAddress="http://localhost:8000/";
var client= new HttpClient {BaseAddress = new Uri(baseAddress)};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PutAsJsonAsync(baseAddress+"Test", "TestParam").Result;
Console.WriteLine(response.Content);
当我运行上面的代码时。 我因某种原因得到404错误,这意味着客户端无法联系webapi方法。
我有三个问题。
1.如何确保客户端可以正确调用web api方法。
2.是否可以直接从url调用该方法?
我试过http://localhost:8000/test/Dummy但没有运气
3.如果可以调用该方法,我怎样才能确保在页面上显示消息"成功"。
答案 0 :(得分:1)
如果未在配置的路由中指定操作,则代码将起作用。在这种情况下,动作由HTTP方法选择(PUT,POST,DELETE,GET ......)。路线shpukd看起来像这样:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
由于您已在路线中指定了{action}
部分,因此您必须在网址中指定操作。在这种情况下,网址应该是这样的:
http://localhost:8000/Test/Put
请参阅Routing in ASP.NET Web API。
如果您想测试您的Web API方法,可用的最佳工具之一是Postman,这是Chrome扩展程序。这解决了你的问题1& 2。
对于Q3:当您正在进行asycn调用时,您必须await
获取响应消息,阅读它并显示相应的消息。如果你不知道async / await模型,你可以read this documentation。