Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC应用程序中启用CORS(部署在azure上)_Asp.net Mvc_Azure_Cors_Azure Active Directory - Fatal编程技术网

Asp.net mvc 在MVC应用程序中启用CORS(部署在azure上)

Asp.net mvc 在MVC应用程序中启用CORS(部署在azure上),asp.net-mvc,azure,cors,azure-active-directory,Asp.net Mvc,Azure,Cors,Azure Active Directory,我知道在这个论坛上有很多问题都在陈述同样的问题。但我想展示我的特定场景,以获得与此相关的指导/建议。 我正在开发一个应该部署在azure上的MVC应用程序(基本上它使用.NETSDK和其他软件包处理WindowsAzure)。应用程序工作正常,但在50-60分钟的空闲时间后(即不刷新),连接将丢失。 在调试代码的过程中(通过Visual Studio 2015 community edition),我发现它将流重定向到Sign-in()函数(我还没有开发该函数,因此我不了解该函数)。在这里,它创

我知道在这个论坛上有很多问题都在陈述同样的问题。但我想展示我的特定场景,以获得与此相关的指导/建议。 我正在开发一个应该部署在azure上的MVC应用程序(基本上它使用.NETSDK和其他软件包处理WindowsAzure)。应用程序工作正常,但在50-60分钟的空闲时间后(即不刷新),连接将丢失。 在调试代码的过程中(通过Visual Studio 2015 community edition),我发现它将流重定向到Sign-in()函数(我还没有开发该函数,因此我不了解该函数)。在这里,它创建一个登录url(以通过azure AD进行身份验证),并将应用程序重定向到该url。这是应用程序给出错误的地方。在浏览器(Google Chrome)控制台中,我找到了它

无法加载MLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

我尝试使用几乎所有的方法在应用程序中启用CORS,即

  • 使用web.config条目
  • 使用nuget软件包Microsoft.AspNet.WebApi.Cors版本5.2.2和5.2.3,通过webapiconfig.cs和/或controller在操作级别全局启用它
似乎没有任何帮助,我在请求和响应中找不到与CORS相关的标题。 启用CORS会有什么问题。请导游。 任何帮助都将不胜感激。 谢谢

编辑:

实际上,应用程序在空闲时的行为是这样的,一旦我们刷新页面,一切就都好了。我只是在调查为什么连接会丢失,以及如何在如此长的空闲时间后保持应用程序正常运行。如果CORS以外的任何东西可能导致此问题,请指导并建议可能的修复方法。

是的,您的应用程序中没有缺少CORS标题。login.windows.net中缺少它。如果您重定向到该页面,则不应该是CORS问题。CORS只有在您从JavaScript调用另一个域时才起作用。检查jsajax调用。有东西试图调用login.windows.net,但不是重定向。

是的,您的应用程序中没有缺少CORS头。login.windows.net中缺少它。如果您重定向到该页面,则不应该是CORS问题。CORS只有在您从JavaScript调用另一个域时才起作用。检查jsajax调用。有东西试图调用login.windows.net,但这不是重定向。

为什么会显示“如果站点部署在Azure上?”?是否使用web应用程序或网站URL更新Azure Active Directory应用程序?CORS规则在接收端指定。在本例中,
login.windows.net/
。这意味着login.windows.net已指定不允许您的应用程序。而不是相反。这不是您可以自己更改的。@Haitham站点尚未实际部署,但我正在本地主机上调试它,是的,我已使用此url更新了Azure ADD应用程序抱歉,我的错,您能告诉我们如何重定向到AAD登录页吗?这是一个登录功能,可以重定向到登录url作为回报“返回新的重定向结果(signInRequest.RequestUrl.ToString());“为什么显示“如果站点部署在Azure上?是否使用web应用程序或网站URL更新Azure Active Directory应用程序?”CORS规则在接收端指定。在这种情况下,
login.windows.net/
。这意味着login.windows.net已指定不允许您的应用程序。反之亦然。我这不是你可以改变自己的东西。@Haitham站点实际上还没有部署,但我正在本地主机上调试它,是的,我已经用这个url更新了Azure ADD应用程序对不起,我的错,你能告诉我们如何重定向到AAD登录页吗?这是一个登录功能,可以重定向到登录url以返回“返回新的重定向结果”(signInRequest.RequestUrl.ToString());“那么我不能在我的请求头中看到'origin'头吗?这是我在代码中指定的(在启用CORS时)。这不是一个跨域请求,本地主机上的应用程序请求'login.windows.net'。这是重定向的服务器端代码,”返回新的重定向结果(signInRequest.RequestUrl.ToString());"服务器返回HTTP 302重定向,浏览器转到URL,而不是涉及CORS的请求。只有当JavaScript代码发出HTTP调用时,浏览器才会查看该调用,如果是跨域的,则发出HTTP选项请求以确定调用是否正常。您遇到了与身份验证相关的问题。我uld建议学习整个应用程序是如何工作的。似乎应用程序是使用WsFed auth进行安全保护的。javascript正在向应用程序上的某个控制器发出请求,并且会话已过期。然后,服务器返回302重定向到
login.windows.net
,js随后返回。正如juunas提到的Azure AD不支持CORS.Whatevejs通过AJAX调用的r API需要以返回401的方式进行保护。然后js需要捕获401并将窗口重定向到Azure AD进行登录。这里的帖子很好:那么我不能在我的请求头中看到“origin”头吗?我在代码中指定了它(启用CORS时)。这不是一个跨域请求,本地主机上的应用程序请求“login.windows.net”。这是重定向的服务器端代码,“返回新的重定向结果(signInRequest.RequestUrl.ToString());”服务器返回HTTP 302重定向,浏览器转到URL,而不是涉及CORS的请求。只有当JavaScript代码发出HTTP调用时,浏览器才会查看该调用,如果是跨域的,则发出HTTP选项请求以确定调用是否正常。您遇到了与身份验证相关的问题。我我们建议学习如何