我正試圖使用 Razor Pages 向我的 SignalR Core Hub 發送 ASP.NET Core 5 應用程式的 Session Id。
我如何將其也添加到 sessionsHub 請求中,該請求被集線器中的 OnConnected() 方法使用?
Razor Page .cs:
public class IndexModel : PageModel
{
private readonly HttpContext _httpContext;
public string SessionId { get; set; }
public IndexModel(IHttpContextAccessor httpContextAccessor)
{
_httpContext = httpContextAccessor.HttpContext。
}
public async Task OnGet()
{
SessionId = _httpContext.Session.Id。
}
使用查詢字串的.cshtml,我也試著在請求中添加一個Session-Id作為頭,結果相同:
@page
@model IndexModel
<script type="text/javascript"/span>>
var sessionId = "@Model.SessionId"。
class CustomHttpClient extends signalR.DefaultHttpClient {
send(request) {
var url = new URL(request.url)。
if(!url.search){
url.href = url.href '?sessionId="' sessionId '"。
}else{
url.href = url.href '&sessionId="' sessionId ' "';
}
request.url = url.href;
return super.send(request)。
}
}
var connection = new signalR.HubConnectionBuilder().withUrl("/sessionsHub"/span>, { httpClient: new CustomHttpClient() }).build()。
connection.start().then(() => {
}).catch(function (err) {
return console.error(err.toString() )。
});
</script>
樞紐:
public class SessionHub : Hub{
public override async 任務OnConnectedAsync()
{
await base.OnConnectedAsync()。
string sessionId = GetSessionId()。
}
private string GetSessionId()
{
HttpContext httpContext = Context.GetHttpContext()。
List<StringValues> sessionIdQueryString = httpContext.Request.Query.Where(x => x.Key == "sessionId").Select(x => x.Value).ToList() 。
if (sessionIdQueryString.Count == 0)
{
throw new NullReferenceException()。
}
string sessionId = sessionIdQueryString.First();
return sessionId。
}
uj5u.com熱心網友回復:
在創建連接時,你需要在url內輸入sessionid值。 這樣,它就可以在所有的樞紐方法中被訪問。代碼將看起來像這樣:
var connection = new signalR.HubConnectionBuilder()
.withUrl("/sessionsHub/[email protected]")
.build()。
connection.start().then(function(){
//ToDo。
}).catch(function (err) {
console.log(err);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332803.html
標籤:

