首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改我的Web服务器代码以添加访问控制-允许-原产地的标题?

如何修改我的Web服务器代码以添加访问控制-允许-原产地的标题?
EN

Stack Overflow用户
提问于 2014-02-04 19:03:10
回答 1查看 2.3K关注 0票数 2

我有一个Web应用程序,能够用Windows调用它的REST方法;我也想从一个HTML/jQuery调用它们,并试图与本教程一起这样做。

我发现的信息表明,我需要在服务器端添加一个指令,允许这种类型的调用,比如从这里

...but不知道我需要添加什么,以及在哪里,才能让它工作。

我在浏览器控制台(以Chrome格式)获得的具体消息是:

代码语言:javascript
复制
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窗体应用程序中调用这些方法,没有问题,但是可以从浏览器中调用这些方法--哇!

更新

我试图在注释中提供的链接中做第一件必须做的事情,尝试将Cors包安装到我的Web /服务器应用程序中,但失败了:

代码语言:javascript
复制
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> 

...and在NuGet GUI中搜索在线包中的"Microsoft.AspNet.WebApi.Cors“,结果是”找不到项目“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 05:24:55

这里中,我看到了使用ASP.NET MVC/Web的简单方法。

对于ASP.NET的Web

代码语言:javascript
复制
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);
    }
}

现在,您已经定义了AllowCrossSiteJson Action属性的含义。剩下的只是将Action Filter属性添加到您选择的控制器或方法的问题。

标记整个API控制器:

代码语言:javascript
复制
[AllowCrossSiteJson]
public class ValuesController : ApiController
{

或单独的API调用:

代码语言:javascript
复制
[AllowCrossSiteJson]
public IEnumerable<PartViewModel> Get()
{
    ...
}

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

希望这会有所帮助!)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21561121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档