我为一些大学课程创建了一个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>
这也没有区别。
您可以给予任何帮助(我真的不想移动此应用程序的主机!)
答案 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站点中查找站点并为其授予完全控制权限。