【问题标题】:PUT + DELETE Http Verbs returning 401/405 from API on shared hosting webserverPUT + DELETE Http Verbs 从共享托管网络服务器上的 API 返回 401/405
【发布时间】:2012-05-01 11:07:21
【问题描述】:

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

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

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

123Reg 共享主机上的应用程序在中等信任下运行。

我一直在联系 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>

这也没什么区别。

您可以提供的任何帮助将不胜感激(我真的不想为这个应用程序移动主机!)

【问题讨论】:

  • 我不确定,支持站点没有指定 IIS 版本,当我在其中一张票中询问时,他们没有提供答案。他们确实有一些与 IIS 7 相关的支持文章,但我不能确定。
  • 我可以确认它确实是 IIS 7

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


【解决方案1】:

This post 解决了我的问题。我做了所有常规的事情:添加了所有必要的 &lt;handlers&gt; 条目,禁用了 WebDAV,但我仍然有 401.3 Unauthorized。

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

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

【讨论】:

  • 非常感谢!几个小时的搜索... tnx 分享。这解决了 401 Unauthorized 消息。 (405错误可以通过删除webdav并添加动词来解决)
【解决方案2】:

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

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

【讨论】:

  • 谢谢,正如你所说,在我的情况下我不能这样做 :( - 我将应用程序移到 appharbor.com 并且它第一次工作。
  • 嗨斯派克!我在 appharbor 中遇到了同样的问题...您是否在 appharbor web.config 中保留了上面的一些配置?
  • @GRGodoi - 抱歉,自从我看这个项目以来已经很久了。似乎我删除了与 webdav(system.webServer 部分)和 authorization 部分相关的所有内容。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多