Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
C# 无法检索WebAPI数据_C#_Asp.net_Asp.net Web Api_Angular - Fatal编程技术网

C# 无法检索WebAPI数据

C# 无法检索WebAPI数据,c#,asp.net,asp.net-web-api,angular,C#,Asp.net,Asp.net Web Api,Angular,在VisualStudio中,我有两个应用程序。一个是Angular 2网站,另一个是WebApi项目。我在WebAPI方法中有一个断点,当Angular服务尝试检索数据但页面上没有显示任何内容时,该断点会被命中。打开浏览器控制台时出现以下错误: XMLHttpRequest cannot load http://localhost:58949/api/people. No 'Access-Control-Allow-Origin' header is present on the reques

在VisualStudio中,我有两个应用程序。一个是Angular 2网站,另一个是WebApi项目。我在WebAPI方法中有一个断点,当Angular服务尝试检索数据但页面上没有显示任何内容时,该断点会被命中。打开浏览器控制台时出现以下错误:

XMLHttpRequest cannot load http://localhost:58949/api/people. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:62761' is therefore not allowed access.

解决这个问题的最佳方法是什么?我通过创建一个MVC应用程序来实现这一点,该应用程序同时托管WebAPI和angular应用程序,但我不喜欢这个解决方案

您必须在web api端启用CORS

我假设您使用的是WebApi核心。要在web api端启用CORS,您必须执行以下步骤-

首先,在project.json-“Microsoft.AspNetCore.Cors”中添加依赖项:“1.0.0”

然后像这样在startup.cs中启用CORS-

app.UseCors(builder => {
    builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
您可以在此处找到有关CORS的更多信息-


看看这是否有帮助。

您必须在web api端启用CORS

我假设您使用的是WebApi核心。要在web api端启用CORS,您必须执行以下步骤-

首先,在project.json-“Microsoft.AspNetCore.Cors”中添加依赖项:“1.0.0”

然后像这样在startup.cs中启用CORS-

app.UseCors(builder => {
    builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
您可以在此处找到有关CORS的更多信息-


查看这是否有帮助。

您面临的问题是浏览器默认不允许跨原点请求。正如您所说,您有两个网站,它们具有不同的URL,在您的情况下,很可能只是本地主机上的不同端口,但这仍然算作“不同”来源,是一种安全措施。您可以始终允许所有源或角度原点访问web api:

Access-Control-Allow-Origin: http://foo.com
Access-Control-Allow-Methods: GET, PUT, DELETE

ASP.NET有一个内置的包,可以为您这样做,所以您不需要样板文件。你可以阅读更多关于它的内容。基本上,它只会向您的web api响应添加一些标题,如上面的示例所示。

您面临的问题是,默认情况下,浏览器不允许跨源请求。正如您所说,您有两个网站,它们具有不同的URL,在您的情况下,很可能只是本地主机上的不同端口,但这仍然算作“不同”来源,是一种安全措施。您可以始终允许所有源或角度原点访问web api:

Access-Control-Allow-Origin: http://foo.com
Access-Control-Allow-Methods: GET, PUT, DELETE

ASP.NET有一个内置的包,可以为您这样做,所以您不需要样板文件。你可以阅读更多关于它的内容。基本上,它只会向您的web api响应添加一些标题,如上面的示例所示。

我在我的WepApi项目中使用它。它位于WebApiConfig.cs中

        // Use NuGet to add this: http://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors
        config.EnableCors();

我在我的WepApi项目中使用它。它位于WebApiConfig.cs中

        // Use NuGet to add this: http://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors
        config.EnableCors();

谢谢执行此操作是否存在任何安全问题?如果要限制到特定的源代码,则可以这样做-`app.UseCors(builder=>builder.WithOrigins(“);`谢谢。执行此操作是否存在任何安全问题?如果要限制到特定的源代码,则可以这样做-`app.UseCors(builder=>builder.WithOrigins(“); `