尝试在 ASP.Net MVC 网站中启用 CORS 时出错

Posted

技术标签:

【中文标题】尝试在 ASP.Net MVC 网站中启用 CORS 时出错【英文标题】:Error when trying to enable CORS in ASP.Net MVC website 【发布时间】:2016-08-02 10:37:19 【问题描述】:

我正在尝试在我的 ASP.Net MVC 网站中启用 CORS。我一直在使用的参考链接可以找到here。

我下载了 CORS 的 nuget 包,并将以下更改应用于我的代码。

我在 Web.Config 中添加了 CORS 模块,如下所示:

<system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
    <!---CORS-->
    <modules runAllManagedModulesForAllRequests="true">
      <add name="MvcCorsHttpModule"
         type="Thinktecture.IdentityModel.Http.Cors.Mvc.MvcCorsHttpModule"/>
    </modules>
    <!---CORS-->
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*"  type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

在 global.asax.cs 中,我添加了:

protected void Application_Start()

    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    //--CORS
    RegisterCors(MvcCorsConfiguration.Configuration);


private void RegisterCors(MvcCorsConfiguration corsConfig)

    var corsAttr = new EnableCorsAttribute("https://www.youtube.com", "*", "*");
    corsConfig.EnableCors();


//xxCORS

但我在使用 MvcCorsConfiguration 时遇到错误:

当前上下文中不存在名称“MvcCorsConfiguration”。

我需要添加命名空间吗?请帮忙!

【问题讨论】:

你使用的是什么版本的 ASP.NET MVC? @AGB:我使用的是 5.2 版。如果您能找到问题所在,请提供帮助。我已经坚持了好几个小时了!我只是想从 youtube 播放视频,但它一直给出这个错误:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。" 我认为您使用的教程有点过时了。你可以试试this Nuget package 并关注项目创建者的this sample 吗? 【参考方案1】:

如果您想向您的 mvc 应用程序发出跨域 ajax 请求,那么您只需要启用 CORS。但是如果您是从您的 mvc 应用程序向其他 url 发出跨域 ajax 请求,那么您不需要启用 CORS在你的 mvc 应用程序中。刚刚测试了这个场景。创建了一个示例 mvc 应用程序,然后向 http://jsonplaceholder.typicode.com/posts/1 url 发出 ajax 请求,它工作正常。 一种解决方案是将您的逻辑移动到 web api 并启用 CORS,然后从您的 mvc 或任何其他应用程序调用此 url

【讨论】:

对不起,我不太明白你说什么。我正在使用 iframe 播放来自 youtube 的视频。视频已播放,但我不断收到此错误“在 Access-Control-Allow-Origin 标头中找不到 Origin null”。我对 json 或 xml 不是很熟悉。你能解释一下吗?而且我没有使用 webapi.. 我正在 MVC 中构建网站。 尝试重现您的问题。但我没有收到任何错误。我已将以下代码放在 cshtml 页面中。 在所有浏览器中都能正常工作。无需配置您的 mvc 应用程序即可使用 CORS。所以请试试这个东西。删除您所做的 CORS 设置或创建一个基本的 mvc 应用程序并插入 iframe 标记。检查您是否遇到错误。 我在一个新的 mvc 项目上尝试了相同的代码,并且得到了相同的错误。跨域请求被阻止:同源策略不允许读取位于gg.google.com/csi?v=2&s=youtube&action=embed& 的远程资源(原因:CORS 标头“Access-Control-Allow-Origin”与“*”不匹配)。在 Mozilla 中遇到此错误。

以上是关于尝试在 ASP.Net MVC 网站中启用 CORS 时出错的主要内容,如果未能解决你的问题,请参考以下文章

带有 ASP.NET MVC 的 jquery - 调用启用 ajax 的 Web 服务

ASP.Net MVC 5 身份验证与另一个 MVC 5 身份网站

如何使用 Angular 2 在 POST 上启用 ASP.NET MVC 4 中的跨源请求

未记录 ELMAH 和 ASP.NET MVC 自定义错误

在构建后事件中使用命令部署 asp.net mvc 网站

在 ASP.NET MVC 5 应用程序中启用 SSL 会导致 OpenIdConnectProtocolValidator 问题