SignalR 的跨域协商请求错误
Cross Domain Negotiation request error with SignalR
我有一个 ASP.NET Web Api 项目,其中已实现 SignalR。在 Stratup class 中,我使用 CorsOptions.AllowAll。在 WebApiConfig class 中,我还使用了 EnableCorsAttribute("", "", "*")。我在服务器位置 (http://192.168.9.6:3030) 发布了这个 Web Api 项目。
但是在尝试使用来自 javascript 客户端的 $.hubConnection("http://192.168.9.6:3030/signalr") 进行连接时,我得到了这个:"Error during negotiation request."
如果我从我的 PC 使用 http://localhost:8080,而不是使用提到的 Url,我可以连接到 SignalR。
这是启动程序Class
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
app.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration();
map.RunSignalR(hubConfiguration);
});
}
}
枢纽Class
public class SetupHub : Hub
{
public void Send(string name, string message)
{
var msg = String.Format("{0}: {1} : {2}", name, message, DateTime.Now);
Clients.All.addMessage(msg);
}
}
WebApi配置Class
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
// config.EnableCors();
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
全球 ASAX
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
JavaScript 客户
var connection = $.hubConnection("http://192.168.9.6:3030/signalr");
var setupHubProxy = connection.createHubProxy('SetupHub');
setupHubProxy.on('addMessage', function (msg) {
alert(msg);
});
connection.start()
.done(function () {
console.log('connected');
})
.fail(function (a) {
console.log('not connected' + a);
});
非常感谢与此相关的任何帮助。
我在 web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
也许这对你也适用。
错误在这一行:
app.UseCors(CorsOptions.AllowAll);
会是
map.UseCors(CorsOptions.AllowAll);
我有一个 ASP.NET Web Api 项目,其中已实现 SignalR。在 Stratup class 中,我使用 CorsOptions.AllowAll。在 WebApiConfig class 中,我还使用了 EnableCorsAttribute("", "", "*")。我在服务器位置 (http://192.168.9.6:3030) 发布了这个 Web Api 项目。 但是在尝试使用来自 javascript 客户端的 $.hubConnection("http://192.168.9.6:3030/signalr") 进行连接时,我得到了这个:"Error during negotiation request."
如果我从我的 PC 使用 http://localhost:8080,而不是使用提到的 Url,我可以连接到 SignalR。
这是启动程序Class
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
app.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration();
map.RunSignalR(hubConfiguration);
});
}
}
枢纽Class
public class SetupHub : Hub
{
public void Send(string name, string message)
{
var msg = String.Format("{0}: {1} : {2}", name, message, DateTime.Now);
Clients.All.addMessage(msg);
}
}
WebApi配置Class
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
// config.EnableCors();
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
全球 ASAX
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
JavaScript 客户
var connection = $.hubConnection("http://192.168.9.6:3030/signalr");
var setupHubProxy = connection.createHubProxy('SetupHub');
setupHubProxy.on('addMessage', function (msg) {
alert(msg);
});
connection.start()
.done(function () {
console.log('connected');
})
.fail(function (a) {
console.log('not connected' + a);
});
非常感谢与此相关的任何帮助。
我在 web.config
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
也许这对你也适用。
错误在这一行:
app.UseCors(CorsOptions.AllowAll);
会是
map.UseCors(CorsOptions.AllowAll);