Web API在托管共享主机时删除并放置不起作用

时间:2013-04-09 09:18:30

标签: web-services asp.net-mvc-4 asp.net-web-api

我担心的是我的web-api项目返回JSON在本地工作得非常好,但是当托管在共享主机上时

我已经添加了这个

<modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules>

我也检查过这个 http://geekswithblogs.net/michelotti/archive/2011/05/28/resolve-404-in-iis-express-for-put-and-delete-verbs.aspx

检查了本文中提到的设置,它就在那里。

DELETE和PUT - http://api.antheminfotech.net/api/employees/23 - 500错误

我已经厌倦了很多事情,我对web-api有点新意,所以也许我错过了某些东西......或者我是否需要VPS托管以获得所需的访问权....

BTW我正在使用enitiy框架并基于EF模型为此创建自动生成的控制器。

 Function PutEmpDetail(ByVal id As Integer, ByVal empdetail As EmpDetail) As HttpResponseMessage
    If Not ModelState.IsValid Then
        Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)
    End If

    If Not id = empdetail.Id Then
        Return Request.CreateResponse(HttpStatusCode.BadRequest)
    End If

    db.Entry(empdetail).State = EntityState.Modified

    Try
        db.SaveChanges()
    Catch ex As DbUpdateConcurrencyException
        Return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex)
    End Try

    Return Request.CreateResponse(HttpStatusCode.OK)
End Function

 Function DeleteEmpDetail(ByVal id As Integer) As HttpResponseMessage
    Dim empdetail As EmpDetail = db.EmpDetails.Find(id)
    If IsNothing(empdetail) Then
        Return Request.CreateResponse(HttpStatusCode.NotFound)
    End If

    db.EmpDetails.Remove(empdetail)

    Try
        db.SaveChanges()
    Catch ex As DbUpdateConcurrencyException
        Return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex)
    End Try

    Return Request.CreateResponse(HttpStatusCode.OK, empdetail)
End Function

2 个答案:

答案 0 :(得分:1)

通常在共享主机上,这些额外的(并且是的,它们是额外的)动词默认情况下不启用。如果99.99%的客户群不需要启用,系统管理员不愿意添加额外内容。

如果您的主机已启用,请咨询您的主机。可能他们没有,也可能,他们可能拒绝启用它们。如果是这样,请向他们询问替代方案,否则迁移到其他主机。

答案 1 :(得分:1)

似乎问题在于共享主机,它们无法绕过安全性并提供正确的访问权限。我将API移动到VPS并且它在那里无缝地工作。