【问题标题】:How to get get string with http session in javascript?如何在javascript中获取带有http会话的字符串?
【发布时间】:2020-08-05 08:31:34
【问题描述】:

我正在使用 VS Code 中的 C# 在 web api ASP-NET 中创建一个聊天应用程序。用户注册和登录正在使用数据库。我在欢迎页面中添加了 SignalR 示例代码,但我想修改:用户名需要是登录的用户名,当我点击“发送消息”后,需要如下所示:''acc1说你好世界''。

SCREENSHOT ABOUT MY PAGE

''Send Message'' 按钮功能在 ''chat.js'' 文件中,我不知道如何在其中获取 ''username' 字符串。HttpContext.Session.GetString("username") 在 javascript 中不起作用。

chat.js

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

//Disable send button until connection is established
document.getElementById("sendButton").disabled = true;



connection.on("ReceiveMessage", function (user, message) {
    var msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    var encodedMsg = user + " says " + msg;
    var li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});

connection.start().then(function () {
    document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
    return console.error(err.toString());
});

document.getElementById("sendButton").addEventListener("click", function (event) {
    var user = document.getElementById("userInput").value;
    var message = document.getElementById("messageInput").value;
    connection.invoke("SendMessage", user, message).catch(function (err) {
        return console.error(err.toString());
    });
    event.preventDefault();
});

Wilcome.cshtml

@page
@model probagetrequest.Pages.WilcomeModel
@using Microsoft.AspNetCore.Http

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Wilcome</title>
</head>
<body>

    Welcome @HttpContext.Session.GetString("username")
    <br>
    <br>
    <a asp-page="index" asp-page-handler="logout">Logout</a>
    <a asp-page="profile">Change Profile</a>

    <div class="container">
        <div class="row">&nbsp;</div>
        <div class="row">
            <div class="col-2">User</div>
            <div class="col-4"><input type="text" id="userInput" /></div>
        </div>
        <div class="row">
            <div class="col-2">Message</div>
            <div class="col-4"><input type="text" id="messageInput" /></div>
        </div>
        <div class="row">&nbsp;</div>
        <div class="row">
            <div class="col-6">
                <input type="button" id="sendButton" value="Send Message" />
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-12">
            <hr />
        </div>
    </div>
    <div class="row">
        <div class="col-6">
            <ul id="messagesList"></ul>
        </div>
    </div>

    <script src="~/js/signalr/dist/browser/signalr.js"></script>
    <script src="~/js/chat.js"></script>

</body>
</html>

ChatHub.cs

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
using System;

namespace SignalRChat.Hubs
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            Console.WriteLine($"user={user}, message={message}");
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}

【问题讨论】:

    标签: javascript c# asp.net-mvc visual-studio-code signalr


    【解决方案1】:

    您可以使用var user = '@HttpContext.Session.GetString("username")'; 并根据需要使用用户对象。

    如果你的脚本在单独的文件中,你可以设置为window对象并在你的js文件中使用。

    window.user = '@HttpContext.Session.GetString("username")';

    <script>
       var user = '@HttpContext.Session.GetString("username")'; //or window.user
       console.log(user)
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多