gpt4 book ai didi

javascript - Breeze.js 返回错误 '; '(分号 + 空格)

转载 作者:行者123 更新时间:2023-11-30 12:43:46 25 4
gpt4 key购买 nike

我昨天让我的 Breeze 代码与我的 WCF 数据服务一起工作。

然后今天,它就停止工作了!当我运行查询时,我收到一条错误消息 '; '(一个分号和一个空格)来自 Breeze 。

错误对象中的其他一切看起来都很正常(我是 breeze 的新手,所以可能有一些我不知道的东西需要寻找)。

知道是什么原因造成的吗?

更新:

当我在调试器中(在我的机器上)运行我的 WCF 数据服务时,一切正常!但是当我在服务器上运行它时,我收到上述错误。

我唯一能想到的是跨域的东西不能正常工作。这是我的跨域代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
EnableCrossDomain();
}

static void EnableCrossDomain()
{
string origin = HttpContext.Current.Request.Headers["Origin"];
if (string.IsNullOrEmpty(origin)) return;
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin);
string method = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
if (!string.IsNullOrEmpty(method))
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", method);
string headers = HttpContext.Current.Request.Headers["Access-Control-Request-Headers"];
if (!string.IsNullOrEmpty(headers))
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", headers);
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.StatusCode = 204;
HttpContext.Current.Response.End();
}
}

这是我如何调用它的一个例子:

function getBags() {

var bags;
var query = breeze.EntityQuery.from('Bags');

return manager.executeQuery(query).then(querySucceded, _queryFailed);

function querySucceded(data) {
bags = data.result;
logSuccess("Retrieved Bag Data")
return bags;
}
}

function _queryFailed(error) {
logError(config.appErrorPrefix + "Query Failed: " + error.message);
throw error;
}

是否有更好的方法允许使用 Breeze 和 WCF 数据服务进行跨域调用?

最佳答案

我遇到了类似的问题,收到“;”错误消息,而且我也在使用 CORS。 Breeze 在尝试为您的响应找到正确的处理程序时出错。它没有在返回的 header 中获取“DataServiceVersion”的值,并且 Breeze 在 response.body.message 中查找错误消息,但它是空的,因此您只能获取“;”。理想情况下,此错误报告应该有一些友好的文本来告诉您正文消息为空或不存在。

我的解决方法是使用 Ward 在他的回答中提供的链接来使用 Mike Wasson CORS 设置。我以前一直在使用 SimpleCorsHandler.cs 类,该类在 Breeze 提供的 ToDo 应用程序示例中使用,但它没有在 OPTIONS 请求的“Access-Control-Allow-Headers” header 值中返回“DataServiceVersion”。我不确定我是否可以配置 SimpleCorsHandler 来解决这个问题;删除 SimpleCorsHandler 并在 WebApiConfig.cs 的 Register 方法中使用这两行是更容易的:

var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion");
config.EnableCors(cors);

(有关参数的更多信息,请参阅 EnableCorsAttribute 文档;对第一个参数使用“*”不是一个好主意,但这里只是一个示例。)Breeze 仍然为每个服务调用运行 OPTIONS 请求,然后执行 GET请求取决于现在包括允许 DataServiceVersion header 的 OPTIONS 响应。 GET请求获取到DataServiceVersion头(我的值为3.0),错误消失。

关于javascript - Breeze.js 返回错误 '; '(分号 + 空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com