我有一个Web应用程序,能够用Windows调用它的REST方法;我也想从一个HTML/jQuery调用它们,并试图与本教程一起这样做。
我发现的信息表明,我需要在服务器端添加一个指令,允许这种类型的调用,比如从这里。
...but不知道我需要添加什么,以及在哪里,才能让它工作。
我在浏览器控制台(以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窗体应用程序中调用这些方法,没有问题,但是可以从浏览器中调用这些方法--哇!
更新
我试图在注释中提供的链接中做第一件必须做的事情,尝试将Cors包安装到我的Web /服务器应用程序中,但失败了:
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“,结果是”找不到项目“。
发布于 2014-02-20 05:24:55
从这里中,我看到了使用ASP.NET MVC/Web的简单方法。
对于ASP.NET的Web
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控制器:
[AllowCrossSiteJson]
public class ValuesController : ApiController
{或单独的API调用:
[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")。如果要提供本地主机,请确保包括端口号。
希望这会有所帮助!)
https://stackoverflow.com/questions/21561121
复制相似问题