Web API put方法继续返回404

时间:2014-05-20 15:06:25

标签: asp.net asp.net-mvc asp.net-web-api asp.net-web-api2

使用C#web api,我创建了一个更新信息的web api。

// Update
// URI PUT + api/Gender/id
[HttpPut]
public IHttpActionResult PutGender(int id, [FromBody] Gender g)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var query = (from gen in genders
                 where gen.Id == id
                 select gen).FirstOrDefault();

    if (query == null)
    {
        return BadRequest("wrong");
    }

    query.Description = g.Description;
    query.LanguageId = g.LanguageId;
    query.InternalCode = g.InternalCode;
    query.isActive = g.isActive;
    query.UpdatedAt = DateTime.Now;

    return StatusCode(HttpStatusCode.OK);
}

我正在通过提琴手进行测试,这就是我运行的方式:

网址http://localhost:49625/API/PutGender 行动PUT 请求标题

Content-Type: application/json
User-Agent: Fiddler
Host: localhost:49625
Content-Length: 86

RequestBody

{"Id":1,"Description":"Undecided","LanguageId":null,"InternalCode":0,"isActive":false}

2 个答案:

答案 0 :(得分:2)

URL缺少控制器的名称。例如,如果您的控制器名为GenderController,则该网址应为http://localhost:49625/API/Gender/PutGender

答案 1 :(得分:0)

对于可能遇到此问题的其他人(包括我自己)。还要检查您的路线配置。如果您使用的是默认路由配置:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

无需指定网址(PutGender)的“操作部分”,“PUT http://myhost/api/gender/1”应该没问题。另外,如果您的方法名为Put ... Something,我很确定您可以省略方法签名中的[HttpPut]属性。