在Web API 2中创建更新方法

时间:2017-02-10 03:12:19

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

我想在记录的特定字段中创建更新方法。 我是ASP.Net中Web API 2的新手。我创建了一个方法,但总是得到一个错误

{"Message":"The requested resource does not support http method 'GET'."}

我想创建一个这样的自定义方法:

        [HttpPut]
        public string AddDeviceID(string deviceID)
        {

            User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123");
            user.MobileDeviceId = deviceID;
            db.SaveChanges();

            return "success";

        }

这是我的路线配置:

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

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

我不知道我在这段代码上缺少什么我只是遵循ASP.Net MVC创建更新方法的概念。

任何人都可以提供一些想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要使用HTTP PUT请求调用您的api。您收到此错误,因为您执行HTTP GET请求。

即使您接受了另一个答案,您仍然应该使用HttpPut属性,因为它的含义更正确。

From wikipedia

  

获取

     

GET方法请求指定资源的表示。 使用GET的请求应该只检索数据并且应该具有   没有其他影响。(其他一些HTTP方法也是如此。)[1]   W3C发布了关于这种区别的指导原则,说,   " Web应用程序设计应遵循上述原则,   但也有相关的限制。"

     

<强> PUT

     

PUT方法请求将所包含的实体存储在提供的URI下。如果URI引用已存在的资源,   它被修改;如果URI未指向现有资源,   然后服务器可以使用该URI创建资源。

只需谷歌了解如何使用您正在测试的库/软件发送HTTP PUT Request

顺便说一下:Postman是一个很好的测试工具。

答案 1 :(得分:0)

发生此错误是因为您执行了HTTP GET请求,但您的操作使用[HttpPut]属性修饰,并且只能接受HTTP PUT。要解决此问题,您可以实现执行HTTP PUT请求的功能,或者您可以使用[HttpGet]属性修饰您的操作,如下例所示:

[HttpGet]        
public string AddDeviceID(string deviceID)
{
        User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123");
        user.MobileDeviceId = deviceID;
        db.SaveChanges();

        return "success";
}  

您是如何提出请求的?请注意,浏览器将发出HTTP GET请求。