PUT + DELETE Http Verbs从共享主机网络服务器上的API返回401/405

时间:2012-04-19 20:46:25

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

我为一些大学课程创建了一个MVC Web Api,它在我的开发机器上运行(运行VS11)。

然而,当我将应用程序部署到123reg上的Web服务器时,除GET和POST之外的HttpVerbs似乎根本没有到达我的应用程序,最初返回了401 Not Authorized响应;然而,在按照建议here关闭“WebDAV”模块后,这些401变为405方法不被允许。在这种情况下,我只禁用处理程序,因为禁用处理程序和模块意味着我的应用程序根本没有启动(错误500没有堆栈跟踪[自定义错误已关闭])。

我打算利用表单成员资格提供程序为我的API添加身份验证功能,但是当401s开始出现时,我从代码中删除了任何[Authorise]属性。

123Reg的共享主机上的应用程序在Medium trust下运行。

我一直在接触123Reg支持,他们一直都很有帮助,但后来他们决定不再帮助我(他们建议添加HttpHandlers,如下所述)(显然,我应该咨询网页设计师...... )

我尝试过的事情:

我已将[AllowAnonymous]属性添加到我的控制器和/或操作中,但没有效果。

我添加了authorization web.config属性,允许所有用户的动词和路径都经过身份验证,而不是:

<authorization>
  <allow users="*" />
  <allow users="?" />
  <allow verbs="*" users="*" />
  <allow verbs="*" users="?" />
</authorization>

我添加了(正如123Reg所建议的那样):

 <system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <add name="PUTVerbHandler" path="*" verb="PUT" modules="ProtocolSupportModule" resourceType="Unspecified" />
      <add name="DELETEVerbHandler" path="*" verb="DELETE" modules="ProtocolSupportModule" resourceType="Unspecified" />
    </handlers>
  </system.webServer>

这似乎是向前迈出的一步,因为我们现在收到405个回复,而不是401响应,但我现在无法取得任何进一步的进展。另外我还补充说:

<httpHandlers>
    <add verb="*" path="*" type="System.Web.Mvc.MvcHttpHandler"/>
</httpHandlers>

这也没有区别。

您可以给予任何帮助(我真的不想移动此应用程序的主机!)

3 个答案:

答案 0 :(得分:1)

我发现了这个:http://forums.iis.net/t/1163441.aspx

从该论坛帖子的外观来看,您需要完全卸载WebDAV以使PUT和DELETE动词起作用。不幸的是,这对共享的虚拟主机场景没有帮助。

答案 1 :(得分:1)

This post解决了我的问题。我做了所有常规的事情:添加了所有必要的<handlers>条目,禁用了WebDAV,但我仍然有401.3未经授权。

启用表单身份验证解决了问题:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms" />
</system.web>

答案 2 :(得分:0)

对我来说这是不同的东西。 我必须转到站点文件夹,打开文件夹的安全选项卡,按“编辑”按钮更改组或用户名权限,从IIS 8站点中查找站点并为其授予完全控制权限。