【问题标题】:Unable to call web api PUT method无法调用 web api PUT 方法
【发布时间】:2015-07-02 19:17:51
【问题描述】:
[System.Web.Http.Route("{id}")]
    [System.Web.Http.HttpPut]
    public async Task<ComplaintVM> Put(int id,int? employeeId)
    {
        var obj = _resolver.GetService<Complaint>();
        obj.FranchiseId = 1;
        obj.Id = id;
        await obj.GetDetailAsyc();
        obj.EmployeeId = employeeId;
        await obj.AllocateAndManageCallAsyc();
        return obj.EntityToVM();
    }

这是使用 [System.Web.Http.RoutePrefix("api/app/complaint")] 的 put 方法

所以当我使用 PUT 请求调用我的方法时,我收到以下错误“消息:“请求的资源不支持 http 方法 'PUT'。”。

但是当我在方法没有 int 的情况下进行相同的调用时?员工 ID 参数。通话正常。

我将employeeId 作为json 格式的请求传递。我正在使用 fiddler 来测试代码

【问题讨论】:

  • 您能告诉我们您的呼叫网址(提琴手有效负载),您的其他控制器操作等吗?看起来路由匹配以不支持 PUT 的其他操作结束。
  • 您是否尝试将 [FromBody] 属性放在employeeid 参数上?

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


【解决方案1】:

Put(int id,int? employeeId) 的问题在于变量 int? employeeId,因为它不是 URL 的一部分,模型绑定器无法绑定属性,因此无法使用 2 个参数调用方法。

使用[FormBody]无效,返回值为null,这是因为输入的是json格式。

问题已通过使用Employee 类型的参数解决,该参数具有EmployeeId 的属性,因此该值映射到员工对象的EmployeeId,方法签名为Put(int id,Employee employee)

如果没有要绑定的模型class,则可以将JObject 类型的参数用作输入参数,然后可以从JObject 中提取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多