【问题标题】:Accessing Method in WebAPI via Put Request通过 Put Request 访问 WebAPI 中的方法
【发布时间】:2015-05-04 11:42:44
【问题描述】:

如果这个问题看起来微不足道,但我对 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. 如果可以调用该方法,我如何确保消息显示在“成功”的页面上。

【问题讨论】:

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


    【解决方案1】:

    如果您未在配置的路由中指定操作,您的代码将起作用。在这种情况下,操作由 HTTP 方法(PUT、POST、DELETE、GET...)选择。路由 shpukd 如下所示:

    routes.MapHttpRoute(
      name: "API Default",
      routeTemplate: "api/{controller}/{id}",
      defaults: new { id = RouteParameter.Optional }
    );
    

    由于您在路由中指定了 {action} 部分,因此您必须在 url 中指定操作。在这种情况下,url 应该是这样的:

    http://localhost:8000/Test/Put
    

    请参阅Routing in ASP.NET Web API

    如果您想测试您的 Web API 方法,可用的最佳工具之一是 Postman,它是一个 Chrome 扩展程序。这解决了您的问题 1 和 2。

    对于Q3:当您进行异步呼叫时,您必须await 获得响应消息,阅读并显示相应的消息。如果您不了解 async/await 模型,可以read this documentation

    【讨论】:

    • 嗨 JotaBe 感谢您的评论。是的,我确实根据您建议的路由使用了代码。即使使用localhost:8000/Test/Put 也不起作用。这应该是localhost:8000/Test/IdName 我通读了文档,但文档没有足够的说明来说明放置请求。
    • 如果您在我的回答中使用路由,您可以使用任何以 Put 开头的操作名称。文档对此进行了解释:此约定仅适用于 GET、POST、PUT 和 DELETE 方法。如果它对你来说失败了,那一定是其他问题。请安装并使用 Postman 创建一个执行 PUT 请求,然后告诉我答案是什么。 GET 或 POST 等其他方法对您有用吗?
    • 是的 JotaBe。它现在工作。非常感谢您的帮助:)
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2013-05-27
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多