通过Put请求访问WebAPI中的方法

时间:2015-05-04 11:42:45

标签: c# asp.net .net rest asp.net-web-api

如果这个问题看似微不足道,但对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.如果可以调用该方法,我怎样才能确保在页面上显示消息"成功"。

1 个答案:

答案 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