我在日志中看到了很多来自这个请求的条目:
/signalr/negotiate错误是:
The controller for path '/Account/Login' was not found or does not implement IController我有一个JS客户端连接到需要身份验证的AppHub:
[Authorize]
[HubName("appHub")]
public class AppHub : Hub
{
// content
}之所以会发生这种情况,是因为存在一个“signalr`”会话,其中有一个过期的cookie试图连接:
发布于 2017-08-15 15:04:09
如果我正确地理解了您的问题,那么您将希望通过继承AuthorizeAttribute类:https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx来创建您自己的自定义类来处理这个问题。
例如:
public class MyCustAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
}
else
{
//modify this to do whatever you want to happen if unauthorized
filterContext.Result = new RedirectResult("/session/noaccess/");
}
}
}然后,您可以使用自定义类来装饰它,而不是默认的授权(示例来自mvc控制器,但应该能够在集线器上使用相同的功能),因此如下:
[Authorize]
public class AdminController : Controller
{变成这样:
[MyCustAuthorize]
public class AdminController : Controller
{我相信/Account/Login是forms auth的默认路径,所以如果没有在您的配置文件中定义它,它就会指向那里。
或者,您可以插入要重定向到的特定url,如果这是您要搜索的内容,方法是将以下loginUrl属性值放在web.config中的auth节> forms元素中:
发布于 2017-08-09 17:41:45
看起来,这可能类似于这里已经提出的问题的其他答案,这些可能提供您的解决方案:
当客户端不再被授权时,您是否尝试停止客户端中的连接?
$.connection.hub.stop();发布于 2017-08-11 14:51:02
您的应用程序正在使用FormsAuthentication,因此默认情况下,Authorize属性将重定向到登录页面,当它无法授权时。
可以通过将以下内容添加到web.config中来禁用此功能:
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
</modules>这将删除所有默认行为。
您的app.config中可能有一些看起来像
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>这就是为您添加这些默认行为的原因。
https://stackoverflow.com/questions/45523537
复制相似问题