我最近将一个项目从SignalR 2.0.0-beta1升级到2.0.0-rc1.据我所知,在RC1中,对跨域请求的支持配置发生了变化.我已经更新了我的项目以使用新语法,但是在尝试与我的集线器通信时,我现在收到以下错误:
XMLHttpRequest无法加载= 1377623738064"> http:// localhost:8080/negotiate?connectionData =%5B%7B%22name%22%3A%22chathub%22%7D%5D&clientProtocol = 1.3&= 1377623738064.Access
http://localhost:7176不允许原点 - 控制允许来源.
客户端站点正在运行,http://localhost:7176并且集线器正在通过控制台应用程序进行侦听http://localhost:8080.我在这里错过了什么吗?在我升级到RC1之前,跨域请求正在运行.
CONSOLE APP入口点
static void Main(string[] args)
{
var chatServer = new ChatServer();
string endpoint = "http://localhost:8080";
chatServer.Start(endpoint);
Console.WriteLine("Chat server listening at {0}...", endpoint);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
CHATSERVER CLASS
public class ChatServer
{
public IDisposable Start(string url)
{
return WebApp.Start<Startup>(url);
}
}
Run Code Online (Sandbox Code Playgroud)
启动配置
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR(new HubConfiguration { EnableJSONP = true });
});
}
}
Run Code Online (Sandbox Code Playgroud)
您的客户端配置有问题.
XMLHttpRequest cannot load =1377623738064">http://localhost:8080/negotiate?connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&clientProtocol=1.3&=1377623738064. Origin http://localhost:7176 is not allowed by Access-Control-Allow-Origin.
谈判请求应该http://localhost:8080/signalr/negotiate?...不是http://localhost:8080/negotiate?....要解决此问题,您可以在调用$ .connection.hub.start之前尝试以下操作:
$.connection.hub.url = http://localhost:8080/signalr;
小智 8
不确定这个问题是否得到了充分的回答,但我对Microsoft提供的示例做了以下更改:
public void Configuration(IAppBuilder app)
{
var config = new HubConfiguration();
config.EnableJSONP = true;
app.MapSignalR(config);
}
Run Code Online (Sandbox Code Playgroud)
我在JS示例中添加了以下内容:
$.connection.hub.start({ jsonp: true }).done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
Run Code Online (Sandbox Code Playgroud)
现在启用了跨域脚本编写.希望这有助于其他人,我有一段时间对它感到困惑.
对于Microsoft.Owin 2.x及更高版本:
Microsoft.Owin.Cors在包管理器控制台中通过以下命令通过NuGet 添加包:
PM> Install-Package Microsoft.Owin.Cors
Run Code Online (Sandbox Code Playgroud)
然后using将此包放在Startup类文件中:
using Microsoft.Owin;
using Microsoft.Owin.Cors;
Run Code Online (Sandbox Code Playgroud)
然后像这样更改您的源代码:
// app.MapHubs(new HubConfiguration { EnableCrossDomain = true });
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13677 次 |
| 最近记录: |