WebAPI2 - 跨源脚本问题
Posted
技术标签:
【中文标题】WebAPI2 - 跨源脚本问题【英文标题】:WebAPI2 - Cross Origin scripting issues 【发布时间】:2017-03-14 22:18:42 【问题描述】:我正在尝试在一个名为 YDN-DB 的框架中访问我的 WebApi 服务。它是一个本地存储类型的数据库。它允许您从 URL 加载和 我正在尝试使用跨域调用。
这是创建 XMLHttpRequest 并进行调用的代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
var me = this;
xhr.onload = function(e)
var lines = xhr.responseText.split('\n');
var documents = [];
for (var i = 0; i < lines.length; i++)
var data = lines[i].split(';');
if (data.length == 2)
for(i=0; i<data.length; i++)
// Here, I will be loading the records into the YDN-DB.
var msg = Documents.length + ' Documents loaded, indexing...';
me.setStatus(msg);
var i=0;
var load = function(i)
var n = 50;
me.db.put('Document', docs.slice(i, i + n)).then(function(keys)
i = i + n;
if (i < docs.length)
this.setStatus(msg + ' ' + i);
load(i);
else
this.setStatus(msg + ' done.');
, function(e)
throw e;
, me);
;
;
xhr.send();
我不断收到错误,我不知道为什么。
XMLHttpRequest cannot load http://localhost:51946/api/Archive/c4020343622d57162cbdc11e603a49d93d64018e5c/1026697/1/10000/D.
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8040' is therefore not allowed access.
这是我的控制器的 WebAPI 函数,我启用了 CORS,并且来自源:
[HttpGet]
[ResponseType(typeof(List<string>))]
[Route("api/Archive/LogonTicket/PID/MinRow/MaxRow/Direction")]
[EnableCors("http://localhost:8040", // Origin
"Accept, Origin, Content-Type, Options", // Request headers
"GET", // HTTP methods
PreflightMaxAge = 600 // Preflight cache duration
)]
public object Archive(string LogonTicket, int PID, int MinRow, int MaxRow, string Direction)
if (svc.ValidateTicket(LogonTicket, PID))
List<string> e = mp.GetArchiveJson(PID.ToString(), MinRow, MaxRow, Direction);
return e;
else
throw new AuthenticationException("Invalid LogonTicket");
有什么想法吗??我是否需要向 XMLHttpRequest 添加第二次调用?
【问题讨论】:
大概你已经安装了Microsoft.AspNet.WebApi.Cors
NuGet 包。根据文档,您是否还在您的启动中运行HttpConfiguration.EnableCors()
? asp.net/web-api/overview/security/…
我想我可能忘了这样做,我会检查一下。
好的,发布,我会接受。天啊,我不敢相信我忘记了
【参考方案1】:
请务必遵循the documentation 中有关“启用 CORS”的所有步骤。有 3 件事是必要的:
-
安装 NuGet 包。
Install-Package Microsoft.AspNet.WebApi.Cors
在 HttpConfiguration 上启用 CORS。通常这是在静态方法中:Register(HttpConfiguration config)
,包括对 config.EnableCors()
的调用。
使用EnableCors
属性装饰您的控制器或方法,例如[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
鉴于您使用EnableCors
属性的示例,很明显您已经得到了#3,它具有#1 作为先决条件,所以您也得到了它。看来您错过了 #2。
【讨论】:
以上是关于WebAPI2 - 跨源脚本问题的主要内容,如果未能解决你的问题,请参考以下文章