【问题标题】:Can't resolve $http.put(); Access-control-allow-origin无法解析 $http.put();访问控制允许来源
【发布时间】:2015-01-18 02:50:05
【问题描述】:

我正在尝试使用在 MVC 4 .net WEB API 中开发的休息服务。我对 $http.get() 和 $http.get(param) 没有任何问题。当我尝试 $http.put() 时出现错误。好吧,我撒谎了。当我开始这个简单的项目时,我在使用 get 方法时遇到了同样的问题,我以这种方式管理它们:

using System;
using System.Web.Http.Filters;

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        if (actionExecutedContext.Response != null)
            actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");

        base.OnActionExecuted(actionExecutedContext);
    }
}

现在好像不行。这是 angularjs 控制台显示的错误:

http://i.stack.imgur.com/LEgwh.jpg

(我还不能放图片,所以我放了一个链接)

我应该怎么做才能使用 put 方法?

【问题讨论】:

  • 你启用了 CORS 吗?
  • 当我编写我在帖子中显示的这段代码时,我之所以写它是因为我在网页中读到这种方式启用了 cors。不是这样吗?我是这类应用程序的新手

标签: javascript c# asp.net angularjs


【解决方案1】:

您是否在 web.config 文件中启用了 PUT?在开发过程中,我的看起来像这样。

<system.webServer>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
  <handlers>
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

此外,为了使用 Web API 启用 PUT 和 DELETE 动词,您需要编辑 applicationhost.config 文件,该文件位于 %userprofile%\documents\iisexpress\config\applicationhost.config 中,您需要将动词添加到ExtensionlessUrl 处理程序,以便您可以使用它们:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

【讨论】:

  • 我已经在 web.config 中完成了更改,它继续引发同样的错误。关于 applicationhost.config 文件,我在 %userprofile%\documents\ 路​​径中没有 iisexpress 文件夹。我没有使用 iis 发布服务,只是直接从 Visual Studio 2010 播放它
  • 我知道 MS 从 Cassini 切换到在 VS2012 中使用 IISExpress。我认为对于VS2010,您可以通过下载IISExpress并启用blogs.msdn.com/b/webdev/archive/2011/03/14/…来替换DEV服务器。否则,您需要弄清楚如何在 VS201 中启用 WebAPI 的动词或使用 IIS(完整)。 2010 年 MS 有人考虑过启用 PUT VERBS 和 WebApI 吗??? :)
  • 我已经下载了 IIS Express 7.5 并在上面安装了解决方案。现在可以了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2018-03-18
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2017-12-15
相关资源
最近更新 更多