C# 信号协商成功,但启动请求失败

C# 信号协商成功,但启动请求失败,c#,angularjs,asp.net-web-api,typescript,signalr,C#,Angularjs,Asp.net Web Api,Typescript,Signalr,我正在为我们的内部应用程序开发一个聊天应用程序,该应用程序使用javascript angularJS客户端中的信号器,并带有一个(目前为自托管)webAPI。这是跨域连接 使用信号器2.2.1 使用Owin 3.0.1 如果相关,使用角度1.5.7 我的问题是,每当我试图与我的中心建立联系时 [08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Auto detected cross domain url.jquery.signalR.js:82

我正在为我们的内部应用程序开发一个聊天应用程序,该应用程序使用javascript angularJS客户端中的信号器,并带有一个(目前为自托管)webAPI。这是跨域连接

使用信号器2.2.1

使用Owin 3.0.1

如果相关,使用角度1.5.7


我的问题是,每当我试图与我的中心建立联系时

[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Auto detected cross domain url.jquery.signalR.js:82 
[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Client subscribed to hub 'chathub'.jquery.signalR.js:82
[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Negotiating with 'https:    localhost:44361/signalr/negotiateclientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D'.jquery.signalR.js:82 
[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: webSockets transport starting.jquery.signalR.js:82 
[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Connecting to websocket endpoint 'wss:    localhost:44361/signalr/connect?transport=webSockets&clientProtocol=1…kAIY9w9Q%3D%3D&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=4'.jquery.signalR.js:82 
[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: Websocket opened.
启动请求失败

[08:26:38 GMT-0400 (Est (heure d’été))] SignalR: webSockets transport connected. Initiating start request.
Failed to load resource: the server responded with a status of 500 ()
XMLHttpRequest cannot load https:    localhost:44361/signalr/start?transport=webSockets&clientProtocol=1…D%3D&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&_=1471436795468. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https:    localhost:3000' is therefore not allowed access. The response had HTTP status code 500.
我已经试着指出这个问题好几天了,我注意到在启动请求调用中,响应缺少“访问控制允许来源”头。最让我头疼的是协商请求和中止请求都包含头

协商请求

响应标题

但不是我的启动请求

启动请求

响应标题

这是我的创业课程

[assembly: OwinStartup(typeof(Teamwork.Api.Startup))]
namespace Teamwork.Api
{
  public partial class Startup
  {
    public void Configuration(IAppBuilder app)
    {
      ConfigureAuth(app);
      app.Map("/signalr", map =>
      {
        map.UseCors(CorsOptions.AllowAll);
        var hubConfiguration = new HubConfiguration {
        EnableJavaScriptProxies = false,
        EnableDetailedErrors = true};
        map.RunSignalR(hubConfiguration);
      });
    }
  }
}
我的枢纽

namespace Teamwork.Api.Hubs
  {
  public class ChatHub : Hub
    { 
      public void TransferMessage(string receiver, string message)
      {
         var name = this.Context.User.Identity.Name;
         var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
         context.Clients.Group(name).AddMessage(name, message);
         context.Clients.Group(receiver).AddMessage(receiver, message);
      }

      public override Task OnDisconnected(bool stopCalled)
      {
         var name = this.Context.User.Identity.Name;

         Clients.All.changeStatus(name, 4);
         return base.OnDisconnected(stopCalled);
      }

      public override Task OnConnected()
      {
         var name = this.Context.User.Identity.Name;
         Clients.All.changeStatus(name, 0);
         return Groups.Add(name, name);
      }
   }
}
我试图将此代码添加到我的Global.asax文件中,但没有成功:

Context.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
var referrer = Request.UrlReferrer;
if (Context.Request.Path.Contains("/signalr") && referrer != null){

    Context.Response.AppendHeader("Access-Control-Allow-Origin", referrer.Scheme + ":    " + referrer.Authority);
}
我一直在寻找一个类似的问题4天了,但我找不到。由于我不精通webAPI和HtmlRequest,我可能错过了一些显而易见的东西。如果没有,那么任何提示/想法/答案都将不胜感激。如果缺少任何内容,请告诉我,我会尽快添加。

多亏了有a但我太笨了,无法正确搜索

多亏了有a但我太笨了,无法正确搜索

Cache-Control:private
Content-Type:text/html; charset=utf-8
Date:Wed, 17 Aug 2016 13:08:05 GMT
Server:Microsoft-IIS/10.0
Transfer-Encoding:chunked
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNccmFwaGFlbC5tb3JpblxTb3VyY2VcUmVwb3NcVGVhbXdvcmtTb2x1dGlvblxUZWFtd29yay5BcGlcc2lnbmFsclxzdGFydA==?=
[assembly: OwinStartup(typeof(Teamwork.Api.Startup))]
namespace Teamwork.Api
{
  public partial class Startup
  {
    public void Configuration(IAppBuilder app)
    {
      ConfigureAuth(app);
      app.Map("/signalr", map =>
      {
        map.UseCors(CorsOptions.AllowAll);
        var hubConfiguration = new HubConfiguration {
        EnableJavaScriptProxies = false,
        EnableDetailedErrors = true};
        map.RunSignalR(hubConfiguration);
      });
    }
  }
}
namespace Teamwork.Api.Hubs
  {
  public class ChatHub : Hub
    { 
      public void TransferMessage(string receiver, string message)
      {
         var name = this.Context.User.Identity.Name;
         var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
         context.Clients.Group(name).AddMessage(name, message);
         context.Clients.Group(receiver).AddMessage(receiver, message);
      }

      public override Task OnDisconnected(bool stopCalled)
      {
         var name = this.Context.User.Identity.Name;

         Clients.All.changeStatus(name, 4);
         return base.OnDisconnected(stopCalled);
      }

      public override Task OnConnected()
      {
         var name = this.Context.User.Identity.Name;
         Clients.All.changeStatus(name, 0);
         return Groups.Add(name, name);
      }
   }
}
class ChatServiceProvider implements IChatServiceProvider {
  baseUrl: string;
  chatHub: HubProxy;

  public setBaseUrl(url: string) {
    this.baseUrl = url;
  }

  public $get(
    $rootScope: fuse.interfaces.IRootScope
  ): IChatService {
    var self = this;
    var connection = $.hubConnection(self.baseUrl);
    var chatHub = connection.createHubProxy("chatHub");
    function initialize(): JQueryPromise<any> {
      connection.logging = true;
      return connection.start();
    };
    return {
      chatHub: undefined,
      initialize: () => {
        return initialize()
      },
    on: function (eventName, callback) {
      chatHub.on(eventName, function (result: any) {
        $rootScope.$apply(function () {
          if (callback) {
            callback(result);
          }
        });
      });
    }
  }
}
  self.chatService.on("addMessage", function (name: string, message: string) {
  this.addMessage(name, message);
  })

  this.$scope.reply = function (id: string, message: string) {
    this.chatService.chatHub.invoke("transferMessage", id, message);
  }

  this.chatService.initialize()
    .done(function (data: HubProxy) {
      self.chatService.chatHub = data;
      console.log("Connected");
    })
    .fail(function () { console.log("Failed") });
Context.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
var referrer = Request.UrlReferrer;
if (Context.Request.Path.Contains("/signalr") && referrer != null){

    Context.Response.AppendHeader("Access-Control-Allow-Origin", referrer.Scheme + ":    " + referrer.Authority);
}