【问题标题】:trying to use POST, but API tries to use GET尝试使用 POST,但 API 尝试使用 GET
【发布时间】:2016-04-25 20:30:57
【问题描述】:

我正在尝试获取使用 POST 的 api 方法,但它坚持尝试使用 GET。我已经用 Google 搜索过 SO,但我尝试的所有操作都返回相同的消息。

这是我的控制器:

    [Route("api/game/{gameId}/createcharacter/{name}")]

    [AcceptVerbs("POST")]
    [HttpPost]
    public IHttpActionResult PostNewCharacter([FromBody]string name)
    {
        return Created("created", CharacterGenerationService.CreateNewCharacter(name));
    }

无论我尝试什么,都会收到以下信息:

消息:“请求的资源不支持 http 方法 'GET'。”

请求 网址:http://localhost:61645/api/game/452/createcharacter/testChar1 请求方法:GET 状态码:405 方法不允许远程 地址:[::1]:61645

我正在使用:使用 System.Web.Http;

这有什么诀窍吗?

谢谢

【问题讨论】:

    标签: c#-4.0 asp.net-web-api asp.net-web-api2


    【解决方案1】:

    使用此代码:

    [Route("api/game/{gameId}/createcharacter/{name}")]
    [HttpPost]
    public IHttpActionResult PostNewCharacter(string name)
    {
        return Created("created", CharacterGenerationService.CreateNewCharacter(name));
    }
    

    【讨论】:

    • 嗨,我修改了我的代码,使其看起来完全一样,但仍然得到相同的消息
    • 你怎么称呼这个?你是否启用了属性路由?
    • 现在我只是在浏览器中导航到路由进行测试。如何启用属性路由?谢谢!
    • 如果您从浏览器地址栏调用,它的 GET 请求。这就是你收到错误的原因。要启用属性路由,请添加 config.MapHttpAttributeRoutes();在 WebApiConfig.cs
    【解决方案2】:

    在您所说的路由模板中,您将从 URL 中获取 name 参数值,但在您的方法的签名中,您使用 FromBody 属性装饰相同的参数,该属性告诉您将从消息正文中检索该值.

    你有两个选择:

    • 删除FromBody 属性,您的网址将正常工作
    • 或删除路由模板中的 {name} 参数并将name 值发布到您的请求正文中。

    gameId 参数呢? 你的方法不需要它吗?如果是,那么您需要将其作为方法参数传递。

    【讨论】:

    • 我确实删除了 FromBody,所以它看起来像这样:public IHttpActionResult PostNewCharacter(string name)。我重建了解决方案,但仍然得到完全相同的消息。 :(
    • 您需要在方法中添加gameid参数。
    • 我在gameId参数中添加了,但我仍然得到同样的信息
    • 您是如何撰写请求的?
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多