3

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

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

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

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

我一直在联系 123Reg 支持,他们提供了一些帮助,但后来决定他们无法进一步帮助我(他们建议添加 HttpHandlers,详情如下)(显然,我应该咨询网页设计师......)

我尝试过的事情:

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

我添加了authorizationweb.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>

这也没什么区别。

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

4

3 回答 3

2

这篇文章解决了我的问题。我做了所有常规的事情:添加了所有必要的<handlers>条目,禁用了 WebDAV,但我仍然有 401.3 Unauthorized。

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

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms" />
</system.web>
于 2015-07-03T19:05:02.760 回答
1

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

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

于 2012-05-03T07:26:53.390 回答
0

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

于 2016-06-08T11:24:35.097 回答