如何修改我的 Web API 服务器代码以添加 Access-Control-Allow-Origin' 标头?

2024-01-30

我有一个 Web API 应用程序,并且能够使用 Windows 窗体实用程序调用其 REST 方法;我也想从 HTML/jQuery 实用程序中调用它们,并尝试按照本教程 http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-%20first-web-api.

我发现信息表明我需要以某种方式在服务器端添加一个指令,允许这种类型的调用,例如来自here https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource-w.

...但不确切知道我需要添加什么以及在哪里才能使其发挥作用。

我在浏览器控制台(Chrome 中)中收到的具体消息是:

XMLHttpRequest cannot load http://localhost:28642/api/VendorItems/GetAll. No 'Access-
Control-Allow-Origin' header is present on the requested resource. Origin 
'http://localhost:54161' is therefore not allowed access.

我还尝试用我的机器名和 IP 地址替换调用“localhost”,但它们都会导致相同的错误消息。

无论如何,这很奇怪/我有点敬畏,我可以毫无问题地从 Windows 窗体应用程序调用这些方法,但可以从浏览器调用这些方法 - 哇哦!

UPDATE

我尝试在评论中提供的链接中执行必要的第一件事,尝试将 Cors 包安装到我的 Web API/服务器应用程序中,但失败了:

PM> Install-Package Microsoft.AspNet.WebApi.Cors -pre -project WebService
Install-Package : No compatible project(s) found in the active solution.
At line:1 char:1
+ Install-Package Microsoft.AspNet.WebApi.Cors -pre -project WebService
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetNoCompatibleProjects,NuGet.PowerShell.Commands.InstallPackageCommand

PM> 

...并在 NuGet GUI 中搜索在线包“Microsoft.AspNet.WebApi.Cors”会导致“未找到项目”。


From here https://stackoverflow.com/questions/6290053/setting-access-control-allow-origin-in-asp-net-mvc-simplest-possible-method,我发现 ASP.NET MVC/Web API 有一些简单的方法。

对于 ASP.NET Web API

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);
    }
}

现在你已经定义了什么是AllowCrossSiteJsonAction Filter Attribute 的意思。剩下的只是将操作过滤器属性添加到您选择的控制器或方法中。

标记整个 API 控制器:

[AllowCrossSiteJson]
public class ValuesController : ApiController
{

或单独的 API 调用:

[AllowCrossSiteJson]
public IEnumerable<PartViewModel> Get()
{
    ...
}

您还可以将 CORS 实施限制为您选择的受信任站点。你应该只改变"*" to "http://your-domain.com,http://your-domain-2.com"等等。请注意原始规范中的逗号分隔和协议(http:// 或 https://)的包含。如果您提供本地主机,请确保包含端口号。

希望有帮助! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修改我的 Web API 服务器代码以添加 Access-Control-Allow-Origin' 标头? 的相关文章

随机推荐